(09)项目中的位图索引误用

原创 2013年12月06日 00:10:12
     我前篇<<DBA写给开发的索引经验>>说了一堆乱加索引的情况,但总得来说开发通常都很好学的,有时也会翻翻数据库性能优化的书,也常常会被书中的一些新特性或名词所吸引,而尝试使用它们。不乏成功案例,但误用特性的情况也不少,其中索引被误用的情况就常见。
      预备讲几种项目中常见的,不过我在这里只拿位图索引(Bitmap Index)说一下事(只针对OLTP环境)。
     书上通常会说,对于基数比较小的列,如果只有有限的几个固定值,如上表中的性别、婚姻状况等等,要为其建立索引的话,采用的就应该是位图索引,而不是B树索引。
     有很多性急的开发一看到这,就忍不住心花怒放。 对啊,可不是么,系统上到处都是这类的,如状态啊,什么类型啊,
属性之类,很多。 经常做为查询条件使用。 位图索引不正好可以用上去吗? 然后就开干了。 
     查询确实是快了。但如果刚好哪个表,总数据量比较大,用户很多并发量大需要频繁地更新的作业就比较悲催了
     有很大可能会碰到响应时间很长的现象,而你检查CPU,内存和I/O都很正常,但更新速度就是上不去。尝试将表上加的位图索引删除掉,
 可能就解决问题了。 
     原因简单来说,是因为加了位图索引的列,每次修改一个值,表中每个等于这个值的行都会锁定即一行有更新,其它相同值的行跟着锁定。
其事务更新就被阻塞,作业被挂起。而像性别,状态...这类列。相同值的行会相当多,数据量越大的表,锁定的行就越多,用户多并发越大,排队就越多。排队时间长了。用户就来投诉了。
    那B*树索引就是系统默认的那个索引有没有这种问题呢,B*树的索引键与表的行是有对应关系的,不像位图索引一扫一大片,一个索引值对应多行。所以B*树索引是没这种问题的。
    那位图索引到底在哪些地方用比较合适呢,它适合于那种查询比较多,但更新并发量不大,不频繁的表
比如归档后的一些单据或操作的历史记录表这类,适应用而定。
     说了这么多就是想提醒下加索引,使用新特性要小心。要了解其优点,更要了解它的缺点。
总之情况要考虑的越多越好。
     很多DBA做得越久,胆子越小是有道理的。

  附条位图索引的创建例子:
create bitmap index idx_xcl on test(status);

另外,位图索引的实现原理很有意思,后面有空再写一篇,用C++实现一个位图的算法给你们看看,像位图,树,各种数据结构
在项目中用得很多的,在数据库中查看原理时常常能找到对照。

MAIL:xcl_168@aliyun.com
Blog:http://blog.csdn.net/xcl168
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

快速搜索位图索引中1的个数.rar

  • 2008年01月20日 10:40
  • 206KB
  • 下载

位图索引

郑重声明:由于本人水平有限,如有不对的地方请大神指正不甚感激(327568824@qq.com) 创建T6表,将dba_objects里的内容全部添加进去。 SQL> createtable t6 ...

位图索引

位图索引非常适合于决策支持系统(Decision Support System,DSS)和数据仓库,它们不应该用于通过事务处理应用程序访问的表。它们可以使用较少到中等基数(不同值的数量)的列访问非常大...

位图索引BitMap

位图(BitMap)索引   前段时间听同事分享,偶尔讲起Oracle数据库的位图索引,顿时大感兴趣。说来惭愧,在这之前对位图索引一无所知,因此趁此机会写篇博文介绍下位图索引。 1. 案例  ...

位图索引的故事

位图索引的故事  一日,一群Java开发者找到Tom先生,说他们新开发的系统已经上线,但性能及其低下,他们问Tom先生能不能替他们看看问题到底出在什么地方。他们告诉Tom,他们的系统采用JSP+EJB...

27、Oracle编程高手箴言:位图索引(Bitmap Index)的故事

您如果熟悉Oracle数据库,我想您对Thomas Kyte的大名一定不会陌生。Tomas主持的asktom.oracle.com网站享誉Oracle界数十年,绝非幸致。最近在图书馆借到这位Oracl...
  • shRootm
  • shRootm
  • 2012年02月29日 15:34
  • 135

oracle四招提高位图索引的使用效果

位图索引是Oralce数据库索引中的异类,其在某些比较特殊的场合中有突出的表现。一般来说,位图索引的效果直接跟列的基数相关。为此在谈到如何提高位图索引的使用效果时,也往往跟这个列的基数相关。为此必须对...

位图索引冲突引发TX锁争用时,则等待enq:TX-row lock conention.

想理解位图索引(Bitmap index)冲突引发的TX锁争用,必须掌握关于位图索引内部结构的知识。B*Tree索引的叶子节点以按排序形式存储索引条目, 每个索引条目指向各自的一个ROWID,所以唯...

Oracle位图索引相关特点介绍

我们都知道Oracle中通过位图索引可以在很大的程度上提高查询的效率,而以下的文章主要要介绍的是Oracle位图索引的相关特点及其使用的时机,如果你想了解的更多的话,以下的文章会给你提供更多的相关知识...

【读书笔记】【收获,不止Oracle】位图索引(2)

本次试验讨论位图索引在即席查询中fa
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(09)项目中的位图索引误用
举报原因:
原因补充:

(最多只允许输入30个字)