学习数据挖掘的课上,看到了这种巧妙的方法,但是没有理解透,所以搜了搜相关知识。如果有错误的地方还请指正,谢谢。
ID | HasInternet | Bitmaps | |
---|---|---|---|
Y | N | ||
1 | Yes | 1 | 0 |
2 | No | 0 | 1 |
3 | No | 0 | 1 |
4 | Unspecified | 0 | 0 |
5 | Yes | 1 | 0 |
特点:
1. 在low-cardinality columns中表现很好
3. 减少index的占用空间
缺点:
1、在需要频繁更新的时候,效率没有b-tree高
创建bitmap index的时候, 必须使用 nologging 和 compute statistics.而且, bitmap index 如果有问题, 最好是直接drop 然后重建而不是去想办法维护它.
在数据仓储应用中,连接一个大的fact table和小的dimension table,如star schema,Bitmap index也是非常有效的。
对于fact table 和 dimension table, 可以在fact table中的外键上建立bitmap index.
bitmap index 和 b-tree 另外一个最大的不同在于对NULL 的处理. bitmap index 可以处理null值, 而b-tree index 则无法存储NULL. 如果是bitmap index 的话, 你可以在where 字句中使用NULL, 如:
此时, oracle 会使用customer_long_name 上的bitmap_index快速得到值, 甚至不用去真正的access table 上的数据.
在partitioned table 上, Bitmap index 只能是local index 而不能是global index.
参考:
http://blog.csdn.net/changtiger/article/details/3342538
http://en.wikipedia.org/wiki/Bitmap_index