oracle 位图索引
Posted leewi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 位图索引相关的知识,希望对你有一定的参考价值。
位图索引非常适合于决策支持系统(Decision Support System,DSS)和数据仓库,它们不应该用于通过事务处理应用程序访问的表。它们可以使用较少到中等基数(不同值的数量)的列访问非常大的表;
索引块的一个索引行中存储键值和起止Rowid,以及这些键值的位置编码,
技巧:
对于有较低基数的列需要使用位图索引。性别列就是这样一个例子,它有两个可能值:男或女(基数仅为2)。位图对于低基数(少量的不同值)列来说非常快,这是因为索引的尺寸相对于B树索引来说小了很多。因为这些索引是低基数的B树索引,
所以非常小,因此您可以经常检索表中超过半数的行,并且仍使用位图索引。
当大多数条目不会向位图添加新的值时,位图索引在批处理(单用户)操作中加载表(插入操作)方面通常要比B树做得好。当多个会话同时向表中插入行时不应该使用位图索引,在大多数事务处理应用程序中都会发生这种情况。
技巧:
如果要查询位图索引列表,可以在USER _INDEXES视图中查询index_type列。
建议不要在一些联机事务处理(OLTP)应用程序中使用位图索引。B树索引的索引值中包含ROWID,这样Oracle就可以在行级别上锁定索引。
位图索引存储为压缩的索引值,其中包含了一定范围的ROWID,因此Oracle必须针对一个给定值锁定所有范围内的ROWID。这种锁定类型可能在某些DML语句中造成死锁。SELECT语句不会受到这种锁定问题的影响。
位图索引有很多限制,如下所示:
-
- 基于规则的优化器不会考虑位图索引。
- 当执行ALTER TABLE语句并修改包含有位图索引的列时,会使位图索引失效。
- 位图索引不包含任何列数据,并且不能用于任何类型的完整性检查。
- 位图索引不能被声明为唯一索引。
- 位图索引的最大长度为30。
技巧:
不要在繁重的OLTP环境中使用位图索引
以上是关于oracle 位图索引的主要内容,如果未能解决你的问题,请参考以下文章