位图索引是oracle查询过程中的一大利器,本章来学习一下oracle位图索引的基本原理和概念。假如有如下的一张表:
假如说用普通的查询:
SELECT * FROM TUSER WHERE TSEX=’男’;
那么数据库便要逐行的去查找性别为男的数据,当数据比较多的时候,这个查询就会变得很慢了。那怎么办呢?针对于这种查询,位图索引将会是一种非常好的办法。
当我们使用位图索引的时候,从性别方向上将会有两个向量,男向量为101,女向量为010
而婚姻方向上则有三个向量,已婚为100,未婚为010,离婚为001
那么假如做如下的查询
select * from tuser where tsex=’男’ and marital=’已婚’;
这个时候用位图向量来查询就非常的简单了,直接对男和已婚两组向量做and操作,那么就会得到如下的结果:
得到的结果是100,即第一条数据符合要求,非常快速的就得到了结果。
从上边的分析可以看以下下的两种场合非常不适合使用位图索引:
1.列上有大量的特征值,比如身份证号,这样的数据列,每个人的都不相同,如果为这样的列添加位图索引会得不偿失。
2.频繁更新的列,如果频繁的更新位图索引所在的列的数据,那么oracle就不得不频繁的维护位图索引,这样就极有可能导致表被锁,影响整个系统的性能。
创建位图索引的方式
CREATE BITMAP INDEX INDEX_NAME ON TABLE_NAME(COLUMN_NAME);