日期:2014-05-16  浏览次数:20551 次

Oracle 10g 读书笔记之索引

oracle 中的索引类型有:
1、B* 树索引:构造类似于二叉树,能根据键提供一行或一个行集的快速访问。这是大多数数据库中最常用的索引。B 代表平衡(balanced),不代表二叉(binary)。
B* 树的特点之一是:所有叶子块都应该在树的同一层上。这一层也称为索引的高度。也就是说索引是高度平衡的。大多数索引的高度都是 2 或者 3,即使索引中有数百万行记录也是如此。
查看索引高度:select index_name, blevel, num_rows from user_indexes where table_name='table_name';
其子类有:
a、索引组织表:索引组织表以 B* 树结构存储。堆表的数据行是以一种无组织的方式存储(只要有可用的空间,就可存放数据)。
b、B* 树聚簇索引:用于对聚簇键建立索引。它是传统 B* 树索引的一个变体,传统的 B* 树中,键都指向一行;而 B* 树聚簇不同,一个聚簇键会指向一个块,其中包含与这个聚簇相关的多行。
c、降序索引:降序索引允许数据在索引结构中“从大到小”的顺序,而不是按“从小到大”的顺序。
d、反向键索引:这也是 B* 树索引,只不过键中的字节会“反转”。将数据放在索引中之前,将先把所存储数据的字节反转,这样对索引的插入就会分布到多个块上,减少对这一块的竞争。
2、位图索引:一个索引条目使用一个位图同时指向多行。它适合于高度重复而且通常只读的数据。
创建语句:CREATE BITMAP INDEX index_name on table_name(col_name)
3、位图联结索引:这为索引结构中的数据提供了一种逆规范化的方法。例如 EMP 和 DEPT 表,可能会统计有多少在某一部门工作,通过使用位图联结索引,则可以在 EMP 表建立联结索引。
创建语句:CREATE BITMAP INDEX emp_bm_idx on emp(d.dname) from emp e, dept d where e.deptno=d.deptno
再执行查询 select count(*) from emp, dept where emp.deptno=dept.deptno and dept.dname='sales' 时则直接访问索引,而不必去访问实际的数据表。
索引的一个先决条件是必须联结到另一个表中的主键或唯一键。
4、基于函数的索引:这些就是 B* 树索引或位图索引,它将一个函数计算得到的结果存储在行的列中,而不存储列数据本身。
5、应用域索引:应用域索引是你自己构建和存储的索引,可能存储在 oracle 中,也可能在 oracle 之外。oracle 文本索引就是一个例子。