`
ananeye
  • 浏览: 651 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle索引研究

阅读更多

前天去面试,自己天天用oracle开发,面试官问了个B树索引概览,我尽然不知道。哎,被面试官打击,只是个开发的熟练工,不懂原理。我在想,我过来,又不是搞创新的,还不是开发项目吗。

后来在想想,原理还是要懂的,面试官会B视我们,自己技术也就停留在开发熟练工层上。

 

回来后,在网上查了一堆资料讲的太难理解,后来找到几个例子不错。哥就整理整理。

 

看技术书,很多明明很简单的,被人翻译了感觉很高深的样子,其实只要举些易懂的例子,
理解起来效果就好太多。下面是我自己收集的讲的比较好的例子。

B树索引,就是我们最常用的普通索引(传统索引)。

简单创建方式为:create index test_id_idx on test(id)。

下面用图解释下B-Tree索引:



 

①:从上往下,第一层为根节点,第二层为分支节点,第三层为叶子节点(包含了列值和rowid)。

rowid 参考 http://www.linuxidc.com/Linux/2013-03/80755.htm

②:当查找的时候,是这么查找的,比如要找到值11,就从跟节点开始,11在0-50中,指向分支节点最左边第一个框,就去分支节点最左边第一框中去找,发现11在11-19中指向叶子节点的左边第二个框,就去叶子节点左边第二个框去找11的值,于是找到两个11的值和响应的rowid。如果只查找索引列的值,就不用根据rowid去表中查找了,如果还要查找值11这行,其他列的值就得根据rowid去表里查找。(除了在同一聚簇中可能不唯一外,每条记录的rowid是唯一的)。
③:叶子节点还有个双向链表(如图)。在通过索引进行范围扫描时会起作用,比如要查找值10-19,如果当查找到值10的时候,不就会再从跟节点开始查找其他的值,而是根据本叶子节点链表的指向去查找其他的值。
---------------------------------------------------------------------------
oracle 位图索引的原理


例子
b-tree索引这样存高度重复的数据








对高度重复的数据 普通索引要反复存,

对于bitmap索引而言:

男  111100
女  000011

男和女的值只要存一次,而后面的位图只占几个字节, 要比btree 索引节约空间

 

  • 大小: 84.1 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics