位图索引用0,1来标示某条记录某个枚举字段属性的值,在多搜索码检索中,通过求与方式,达到快速定位的目的。
比方有表User
id
name
sex
education(学历)
记录
1,tom,m,初中
2,jack,f,大学
3,john,m,初中
4,robin,f,大学
5,rose,m,高中
假如sex有值:m,f
education有值:初中,高中,大学
对于查询sql
select *from user where sex='m' and education='初中'
我们建立针对sex和education的位图索引
对sex
m:10101(按每条记录来,如果该记录sex=m,则为1)
f:01010(和m正好相反)
对education(同上)
初中:10100
高中:00001
大学:01010
那么对于上面的查询,我们只要把m的位图值和初中的位图值,做一个简单与操作,
10101
10100
=10100
就可以知道第1和3条记录是满足检索条件的
小结
1、位图能达到最大优点是占用空间小,执行速度快
空间=记录总数N*Count(枚举值)个bit位
2、位图方式对于字段是枚举类型,且有多个这样字段的组合等于查询场景比较适合