暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle数据库位图索引详解

Oracle微学堂 2018-03-23
6187

概念

什么是位图索引:就是用位图表示的索引,oracle对于选择度底的列的每个键值建立一个位图,位图中的每一位可能对应多个列,位图中位等于1表示特定的行含有此位图表示的键值。

对查询的影响

由于索引是位图,所以很多很多时候可以对这些索引中的位图进行位运算-and or),这样的速度明显比b树快(某些情况下)。由于位图索引可以存储null,所以可以直接通过位图索引计数(肯定是准确的)。后面提到的有点和位图的计算方式是直接相关的。

位图的优点(主要针对dw)

减少即席查询的相应时间

和其它类型索引比较,真正节约了索引数据空间

即使在非常差的硬件上,也可能会有戏剧化的性能提升

高效的并行DMLLOAD操作。

生成索引的时候更高效,首先是不排序,其次是占用的空间少(索引空间)。

可以通过位图索引直接计数。

位图索引的缺点

不适合选择度底的列

如果有比较频繁的insert,update等操作,可能导致性能很底下,因为更新索引用的是行锁(可能锁定多行),而不是排它锁。

可能会溢出,索引数据块难于放下整个索引值,这导致低效。

位图索引在Trusted Oracle中不支持
不能被规则优化器(RBO)使用
不能用于分区表的全局索引
位图索引不支持buildrebuildONLINE选项,在10.2中,只有位图连接索引不支持,普通位图索引可以指定ONLINE选项。
对于有直接装载的位图索引,不提供SORTED_INDEX标记
位图索引不能用于完整性检查 

位图索引不能定义为UNIQUE
9i
之前,不能在索引组织表上创建位图索引,9i开始支持在索引组织表上创建位图索引:在IOT上创建位图索引要求有一个映射表。
不能给域索引指定BITMAP

位图索引的适用场合

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

位图索引的特点

1.Bitmap索引的存储空间
相对于B*Tree索引,位图索引由于只存储键值的起止Rowid和位图,占用的空间非常少.
bitmap
的空间占用主要根以下4个因素相关:
a.
表的总记录数
b.
索引列的键值多少,列的不同值越少,所需的位图就越少.
c.
操作的类型,批量插入比单条插入所面的位图要少得多,8i,9i下是这样的,10G则没有这种区别,详见后面的分析.
d.
索引列相同键值的物理分布,8i,9i,不同块上的数据,相同的键值,会建立不同的位图行()来表示
2.Bitmap索引创建的速度
位图索引创建时不需要排序,并且按位存储,所需的空间也少.
B*Tree
索引则在创建时需要排序,定位等操作,速度要慢得多.
3.Bitmap索引允许键值为空
B*Tree
索引由于不记录空值,当基于is null的查询时,会使用全表扫描,
而对位图索引列进行is null查询时,则可以使用索引.
4.Bitmap索引对表记录的高效访问
当使用count(XX),可以直接访问索引就快速得出统计数据.
当根据位图索引的列进行and,or in(x,y,..)查询时,直接用索引的位图进行或运算,在访问数据之前可事先过滤数据.
5.Bitmap索引对批量DML操作只需进行一次索引
由于通过位图反映数据情况,批量操作时对索引的更新速度比B*Tree索引一行一行的处理快得多.
6.Bitmap索引的锁机制
对于B*Tree索引,insert操作不会锁定其它会话的DML操作.
而位图索引,由于用位图反映数据,不同会话更新相同键值的同一位图段,insertupdatedelete相互操作都会发锁定。
对于oracle 8i,9i,单行插入时,由于一个位图行(位图段)只记录8行记录,所以最多锁住相同键值的8行数据的DML操作.
而批量插入时,和10G一样,同一键值只有一个位图行(位图段),所以,相同键值的所有数据的DML操作都会被锁住。

位图索引示意图


需要注意的是,这只是个示意图,实际上每个位图的位数并非刚好等于记录数,而是会根据情况来分解,否则对于居多的数据而言,位图未免太大了。

扫描二维码关注我的微学堂

搜索刘老师微信号:Rman-2014,备注“Oracle学习与咨询”,即可添加好友;或者扫描下面二维码,关注我的“微学堂”公众号,了解最新OCP认证动态、题库及答案解析、培训机构及讲师介绍、课堂授课内容等。每天还有一篇技术文章发布哦!


文章转载自Oracle微学堂,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论