位图索引:原理BitMap index excel index
前段时间听同事分享,偶尔讲起Oracle数据库的位图索引,顿时大感兴趣。说来惭愧,在这之前对位图索引一无所知,因此趁此机会写篇博文介绍下位图索引。
1. 案例
有张表名为table的表,由三列组成,分别是姓名、性别和婚姻状况,其中性别只有男和女两项,婚姻状况由已婚、未婚、离婚这三项,该表共有100w个记录。现在有这样的查询: select * from table where Gender=‘男’ and Marital=“未婚”;
姓名(Name)
性别(Gender)
婚姻状况(Marital)
张三
男
已婚
李四
女
已婚
王五
男
未婚
赵六
女
离婚
孙七
女
未婚
...
...
...
1)不使用索引
不使用索引时,数据库只能一行行扫描所有记录,然后判断该记录是否满足查询条件。
2)B树索引
对于性别,可取值的范围只有'男','女',并且男和女可能各站该表的50%的数据,这时添加B树索引还是需要取出一半的数据, 因此完全没有必要。相反,如果某个字段的取值范围很广,几乎没有重复,比如身份证号,此时使用B树索引较为合适。事实上,当取出的行数据占用表中大部分的数据时,即使添加了B树索引,数据库如oracle、mysql也不会使用B树索引,很有可能还是一行行全部扫描。
2. 位图索引出马
如果用户查询的列的基数非常的小, 即只有的几个固定值,如性别、婚姻状况、行政区等等。要为这些基数值比较小的列建索引,就需要建立位图索引。
对于性别这个列,位图索引形成两个向量,男向量为10100...,向量的每一位表示该行是否是男,如果是则位1,否为0,同理,女向量位01011。
RowId
1
2
3
4
5
...
男
1
0
1
0
0
女
0
1
0
1
1
对于婚姻状况这一列,位图索引生成三个向量,已婚为11000...,未婚为00100...,离婚为00010...。
RowId
1
2
3
4
5
...
已婚
1
1
0
0
0
未婚
0
0
1
0
1
离婚
0
0
0
1
0
当我们使用查询语句“select * from table where Gender=‘男’ and Marital=“未婚”;”的时候 首先取出男向量10100...,然后取出未婚向量00100...,将两个向量做and操作,这时生成新向量00100...,可以发现第三位为1,表示该表的第三行数据就是我们需要查询的结果。
RowId
1
2
3
4
5
男
1
0
1
0
0
and
未婚
0
0
1
0
1
结果
0
0
1
0
0
3.位图索引的适用条件
上面讲了,位图索引适合只有几个固定值的列,如性别、婚姻状况、行政区等等,而身份证号这种类型不适合用位图索引。
此外,位图索引适合静态数据,而不适合索引频繁更新的列。举个例子,有这样一个字段busy,记录各个机器的繁忙与否,当机器忙碌时,busy为1,当机器不忙碌时,busy为0。
这个时候有人会说使用位图索引,因为busy只有两个值。好,我们使用位图索引索引busy字段!假设用户A使用update更新某个机器的busy值,比如update table set table.busy=1 where rowid=100;,但还没有commit,而用户B也使用update更新另一个机器的busy值,update table set table.busy=1 where rowid=12; 这个时候用户B怎么也更新不了,需要等待用户A commit。
原因:用户A更新了某个机器的busy值为1,会导致所有busy为1的机器的位图向量发生改变,因此数据库会将busy=1的所有行锁定,只有commit之后才解锁。
更多阅读
复印机的基本结构和工作原理 复印机对位辊工作原理
复印机能快速、便捷的将文件、图片、书稿等图文资料进行复制,是办公室不可缺少的现代办公设备,因而得到了广泛的应用。1、复印机的种类特点由于复印机大都采用静电的方式进行复印,又被称之为静电复印机。新一代复印机从曝光、图文稿件
Flash教程 位图和矢量图的区别 位图转矢量图
首先我们需要知道计算机是以以矢量或位图格式来显示图形。 了解这两种格式的差别有助于您更有效地工作。 使用 Flash 可以创建压缩矢量图形并将它们制作为动画。 Flash 还可以导入和处理在其它应用程序中创建的矢量图形或位图图形。
技巧汇总 2345看图王使用小技巧 excel小技巧
为了让大家更全面的了解看图王,更好的使用它呢,现在开始小编要跟大家分享一下看图王可能被大家忽略的功能技巧哦~也欢迎大家积极的提出宝贵的意见和建议,督促我们进步哦~一、隐藏在鼠标下面的小技巧1、鼠标滚轮设置在看图王中,我们人性
在EXCEL2007或2010图中添加标准差 excel怎么添加标准差
Excel2007或2010在功能上较2003版本强大许多,但是一些功能键的位置和操作方法发生了一些改变,下面就通过简单的例子介绍一下,如何在Excel 2007或 2010中添加误差线的具体步骤。1、在Excel中输入X,Y和相应的误差值,并对X,Y做图。2、点击
数据库索引优化 数据库索引原理
本文探討: 動態管理檢視與函數 伺服器等待的原因 一般索引問題 邏輯 I/O 相關聯的問題 目錄伺服器等待的原因讀取及寫入遺漏資料庫索引高成本的遺漏索引未使用的索引高成本的使用中索引常用的索引邏輯片段的索引I/O 的高成本查詢