位图索引原理分析

位图索引原理分析

ID:38263566

大小:22.33 KB

页数:7页

时间:2019-06-07

位图索引原理分析_第1页
位图索引原理分析_第2页
位图索引原理分析_第3页
位图索引原理分析_第4页
位图索引原理分析_第5页
资源描述:

《位图索引原理分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、位图索引  位图索引  一.什么是位图索引  我们目前大量使用的索引一般主要是B*Tree索引,在索引结构中存储着键值和键值的RowID,并且是一一对应的.  而位图索引主要针对大量相同值的列而创建(例如:类别,操作员,部门ID,库房ID等),  索引块的一个索引行中存储键值和起止Rowid,以及这些键值的位置编码,  位置编码中的每一位表示键值对应的数据行的有无.一个位图索引块可能指向的是几十甚至成百上千行数据的位置.  这种方式存储数据,相对于B*Tree索引,占用的空间非常小,创建和使用非常快.  当根据键值查询时,可以根据起始Rowid和位图状态

2、,快速定位数据.  当根据键值做and,or或in(x,y,..)查询时,直接用索引的位图进行或运算,快速得出结果行数据.  当selectcount(XX)时,可以直接访问索引就快速得出统计数据.  创建语法很简单,就是在普通索引创建的语法中index前加关键字bitmap即可,例如:  createbitmapindexH病人挂号记录_ix_执行人onH病人挂号记录(执行人);  二.位图索引的特点  1.Bitmap索引的存储空间  相对于B*Tree索引,位图索引由于只存储键值的起止Rowid和位图,占用的空间非常少.  bitmap的空间占用主

3、要根以下4个因素相关:  a.表的总记录数  b.索引列的键值多少,列的不同值越少,所需的位图就越少.  c.操作的类型,批量插入比单条插入所需的位图要少得多,8i,9i下是这样的,10G则没有这种区别,详见后面的分析.  d.索引列相同键值的物理分布,8i,9i中,不同块上的数据,相同的键值,会建立不同的位图行(段)来表示  注:本文提到的8i,9i,10g,我试验的环境是8.1.7,9.2.0.5,10.2  2.Bitmap索引创建的速度  位图索引创建时不需要排序,并且按位存储,所需的空间也少.  B*Tree索引则在创建时需要排序,定位等操作,

4、速度要慢得多.  3.Bitmap索引允许键值为空  B*Tree索引由于不记录空值,当基于isnull的查询时,会使用全表扫描,  而对位图索引列进行isnull查询时,则可以使用索引.  4.Bitmap索引对表记录的高效访问  当使用count(XX),可以直接访问索引就快速得出统计数据.  当根据位图索引的列进行and,or或in(x,y,..)查询时,直接用索引的位图进行或运算,在访问数据之前可事先过滤数据.  5.Bitmap索引对批量DML操作只需进行一次索引  由于通过位图反映数据情况,批量操作时对索引的更新速度比B*Tree索引一行一行

5、的处理快得多.  6.Bitmap索引的锁机制  对于B*Tree索引,insert操作不会锁定其它会话的DML操作.  而位图索引,由于用位图反映数据,不同会话更新相同键值的同一位图段,insert、update、delete相互操作都会发锁定。  对于oracle8i,9i,单行插入时,由于一个位图行(位图段)只记录8行记录,所以最多锁住相同键值的8行数据的DML操作.  而批量插入时,和10G一样,同一键值只有一个位图行(位图段),所以,相同键值的所有数据的DML操作都会被锁住。  下面,针对8i,9i观察一下锁机制:  SQL>Declare  

6、Begin  ForiIn1..9  Loop  InsertIntoH病人挂号记录(Id,No,号别,执行人)Values(i,'G000001',1,'张1');  EndLoop;  Commit;  End;  /  SQL>deleteH病人挂号记录whereid=1;  不提交,另开一个会话,  SQL>deleteH病人挂号记录whereid=9;  操作可以进行,没有锁定。  SQL>deleteH病人挂号记录whereid=8;  操作等待,由于和另外一个会话操作的记录的位图索引在同一个位图段上(一个位图段最多8行),所以被锁住了。  

7、三.位图索引的适用场合  1.位图索引是Oracle数据库在7.3版本中加入的,8i,9i企业版和个人版支持,标准版不支持.  2.基于规则的优化器无法使用Bitmap索引  3.适应于有大量重复值的列查询  4.对于8i,9i版本,不适用于单行插入,适用于批量插入的数据,  因为单行插入时,相同键值,每插入8行就会生成一行索引块中的位图段,即使相同的值.  而批量插入时,相同键值只生成一个位图段.  5.由于并发DML操作锁定的是整个位图段的大量数据行,所以位图索引主要是用于OLAP应用,也可以用于OLTP中主要为读操作的表.  关于bitmap的两个

8、参数  SQL>showparameterbitmap;  NAMETYPEVA

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。