6、Bitmap Index(位图索引)
组织形式与Btree索引相同,也是一棵平衡树。不同点是叶子节点里存放索引条目的方式不同。
用户表T_User_Info里所有的记录在列UserType上只具有三个值:01、02和03。在列UserType上创建位图索引以后,则叶子节点的内容如上图所示。可以看到位图索引只有三个索引条目,也就是每个UserType列的值对应一个索引条目。位图索引条目上包含表第一条记录的ROWID以及最后一条记录的ROWID,最后一部分则是由多个bit位所组成的bitmap,每个bit位就对应一条记录。‘1’代表索引在该记录行存在,‘0’代表无。
当发出where UserType='01'这样的SQL语句时,DB会去搜索'01'所在的索引条目,然后扫描该索引条目中的bitmap里所有的bit位。第一个bit位为 1,则说明第一条记录上的UserType='01',于是返回第一条记录所在的ROWID,再去定位记录行。
语法:create bitmap index idx_bm_emp1_deptno on emp1(deptno);
总结:
- 位图索引适合唯一值很少的列,也就是重复值很多的列。
- 如果被索引的列经常被 更新的话,则不适合使用位图索引。也就是适合OLAP,不适合OLTP