Oracle - 位图索引的适用条件

位图索引的适用条件

位图索引适合只有几个固定值的列,如性别、婚姻状况、行政区等等,而身份证号这种类型不适合用位图索引。

位图索引适合静态数据,而不适合索引频繁更新的列。

举个例子,有这样一个字段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之后才解锁。

问题: 为什么更新了某个机器的busy值为1,会导致所有busy为1的机器的位图向量发生改变,因此数据库会将busy=1的所有行锁定?

答案请看位图索引的存储结构。

位图的存储,位图中位的个数和表中的记录数项目,

比如下面婚姻状况表

姓名(Name) 性别(Gender) 婚姻状况(Marital)
张三 已婚
李四 已婚
王五 未婚
赵六 离婚
孙七 未婚

表中有5行记录,所以创建的记录会有5位

性别列-男的位图: 10100

性别列-女的位图: 01011

已婚列的位图: 11000

未婚列的位图: 11000

离婚列的位图: 11000

所以现在知道了吧, 当要更新位图索引时,就要更新这个位图,那么将会锁定整个位图或者要更新的这个位所在的块。

时间: 2024-12-09 10:58:26

Oracle - 位图索引的适用条件的相关文章

oracle位图索引

以下内容主要都是关于oracle 10g位图索引,重点是存储,其它优缺点,查询机制等也略微介绍,概因为存储机制是根基.内容主要分四个部分:1)来源于http://blog.chinaunix.net/uid-20687159-id-1894992.html2)来源于http://blog.sina.com.cn/s/blog_4c6fef63010085m8.html3)来自oracle官方文档的和其它一些.  4)个人的试验,看位图索引的情况.-------------------------

Oracle 位图索引

内容简介: 1.位图索引 1.1位图索引使用注意事项; 1.2 使用位图索引; 1.3 位图索引对DML操作的影响; 2.位图连接索引 2.1 明确需求后使用位图索引; 2.1创建位图连接索引的注意事项: 1.位图索引: 1.1位图索引使用注意事项: ? 一般适用于低基数列; ? 适合数据仓库; ? 对于启用位图索引的表,应尽量减少或避免DML操作; ? 如果对一张含有多列位图索引的表进行大量DML操作,应考虑将位图索引删除,DML操作结束后重建位图索引; ? 不适用于频繁持续发生DML操作的O

数据库使用-oracle位图索引

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

索引:位图索引理解

文章转载自  http://www.360doc.com/content/14/0508/15/11965070_375805586.shtml 1. 案例 有张表名为table的表,由三列组成,分别是姓名.性别和婚姻状况,其中性别只有男和女两项,婚姻状况由已婚.未婚.离婚这三项,该表共有100w个记录.现在有这样的查询:     select * from table where Gender='男' and Marital="未婚"; 姓名(Name) 性别(Gender) 婚姻状

于位图索引相关的执行计划

位图索引是oracle数据库里除B树索引之外的另外一种索引的类型,它主要用于数据仓库或者DSS系统.在数据仓库或DSS系统中,针对某些类型的sql,用位图索引比用B树索引要快很多,这主要是位图索引实现了快捷的按位运算的缘故. 位图索引的物理存储结构和普通B树索引的物理存储结构相似,也是按照被索引的键值列有序存储,只不过和索引键值一起存储的不再仅仅是索引键值所对应的rowid,而是变成了三部分的组合.这三部分分别为对应rowid的下限,对应rowid的上限和被压缩存储的位图(Bitmap Segm

索引优化原则及Oracle中索引总结

索引建立原则 确定针对该表的操作是大量的查询操作还是大量的增删改操作. 尝试建立索引来帮助特定的查询.检查自己的sql语句,为那些频繁在where子句中出现的字段建立索引. where语句中不得不对查询列采用函数查询,如upper函数,最好建立相应函数索引: 在SQL语句中经常进行GROUP BY.ORDER BY的字段上建立索引 用于联接的列(主健/外健)上建立索引: 在经常存取的多个列上建立复合索引,但要注意复合索引的建立顺序要按照使用的频度来确定: 尝试建立复合索引来进一步提高系统性能.修

数据库索引-位图索引

在学习hive的时候遇到了位图索引,查了查资料.现则很难管理如下,算是个基础知识的了解吧. 一:概念介绍: 百度百科: 位图索引主要针对大量相同值的列而创建(例如:类别,操作员,部门ID,库房ID等),索引块的一个索引行中存储键值和起止Rowid,以及这些键值的位置编码,位置编码中的每一位表示键值对应的数据行的有无.一个块可能指向的是几十甚至成百上千行数据的位置. 当然百度百科你们懂的...来看看wiki的吧 维基百科: Bitmap indexes have traditionally bee

Oracle索引总结(四)- Oracle索引种类之位图索引

位图索引 1.1 位图索引概述 位图索引通过位图向量,表示索引键值在表中的分布. 适用于没有大量更新操作的对象,如:OLAP数据库. 对于存在大量更新操作的索引列,不适用位图索引.因此对于OLTP并不适用. 更新位图向量时,相应位图涉及的所有数据行会被锁定,无法针对这些数据行的该索引列进行DML操作. 1.2 位图索引结构的说明 与B-tree索引的联系及区别如下: 与B-tree索引的联系:位图索引使用B-tree形式组成. 与B-tree索引的区别:位图索引的一个索引键值对应一个叶子节点.(

oracle中位图索引和B-tree索引的区别

1.适用系统的不同:位图索引适合OLAP系统,而B-tree索引适合OLTP系统. 2.占用存储空间不同:位图索引只需要很小的存储空间,而B-tree索引需要占用很大的存储空间. 3.创建需要的时间不同:位图索引创建很快,而B-tree索引创建很耗时. 4.dml操作影响大小不同:位图索引只适合海量查询,update.insert.delete时会产生负影响,而B-tree索引适合频繁的dml操作. 5.查询范围不同:位图索引适合数据重复率高的表,且可以高效地执行包含AND,OR或者XOR的逻辑