在这篇文章里,给大家简单介绍一下本人对Oracle索引的理解,如有不妥的地方,请不吝指教。
本文只讲最最平常最最简单的索引,就是以create index ix on tx(a,b,c);形式创建的索引,而不讲位图索引、反向键索引、倒序索引、基于函数的索引等等。其实呢,只要是基于B树的索引,不管是在Oracle, Mysql,还是其它数据库中,原理应当都是一样的。
索引最重要的一个性质应该就是有序,索引中的每一项,是从左到右,从小到大,以严格的顺序排列好的。
下面的讨论都以上面的索引ix(a,b,c)为例。
把这棵索引的叶子节点画到纸上,大概是这样的:
a1 a2 a3 …… an
b1 b2 b3 …… bn
c1 c2 c3 …… cn
上面这个3×n的矩阵,每一列代表了一条记录,同时这一列记录,也对应了表里的唯一一条记录。当然,在Oracle里,对于non-unique索引,需要补上rowid,才是真正唯一的。上面的索引相当于create unique index ix on tx(a,b,c,rowid); 我们把这个细节忽略掉。
把每一列看作一个向量,vi = (ai, bi, ci),
有序的含义就是:
vi < vj iff i < j;
vi < vj这么定义:
(ai < aj) or (ai = aj and bi < bj) or (ai = aj ...
转载请注明:爱开源 » Oracle索引abc