索引包含了rowid+存储列值
rowid包含了存储列值的表行在磁盘上的物理位置,有了rowid,Oracle可以通过最少量的磁盘读取有效的检索表种的数据。
为了提高性能,Oracle还使用了索引来强制执行已经启动的主键和唯一约束。当外键列建立索引时,Oracle可以更好的管理表锁定的情况。
索引创建是需要付出代价的,需要消耗磁盘空间和系统资源。
B树索引时Oracle默认的索引类型。
再表中值最独特的列上创建B树索引,效率最高。
创建合适的索引可以提高性能。
再某些情况下,查询优化器可以选择不使用索引,也就是查询优化器计算的全表扫描的成本低于使用索引时的成本。
再某些情况下,Oracle只需要访问索引就可以检索出要查询的数据,无需对表进行访问。
默认的索引类型,平衡树索引,适用于高基数(不同值的程度高)的列,除非特殊原因要使用不同的索引类型,否则正常的B树索引。
当主键包含大多数的列时很有效率,这种索引就像访问表一样。“数据”存储再一个类似B数的结构中。
B树索引的一种形式,用于强制执行列值的唯一性。经常与主键和唯一性约束一起使用。但是也可以独立于约束而创建。
B树索引的一种形式,再索引有许多顺序插入的情况下,用于平衡I/O.
适用于签导列经常重复的组合索引,压缩叶条目,此功能适用于B树索引或者IOT(索引组织表)索引
B树索引的一种,在索引对应的列值按照降序(默认是升序)排序时使用,反向键索引不能指定降序,如果是位图索引,那么oracle忽略降序。
对于包含低基数列,以及再sql语句的where子句中使用许多and或者or运算符的数仓环境,非常适合使用这种索引,位图索引不适合经常更新行的在线事务处理(oltp)数据库。无法创建唯一的位图索引。
再数据仓库环境中,对于利用连接事实表和维表的星型模式结构的查询非常有用。
适用于应用sql函数的列,可以与b树索引类型或者位图索引类型结合使用。
在表的虚拟列上定义的索引,适用于应用了sql函数的列,可以用来替代基于函数的索引。
允许通过create index 的nosegment子句创建没有物理段或者区的自居,再调优sql时有用,因为无需建立物理索引而避免消耗资源。任何类型的索引都可以创建为虚拟索引。
该索引对查询优化器时不可见的。然而,再表中的数据被修改的同时也维护索引结构。用于在使索引对应的程序可见之前测试它。任何类型的索引都可以创建为不可见。
跨分区表的所有分区或者常规表的全局索引,它的类型可以是B树索引,而不能是位图索引。
本地索引基于分区表的单个分区,它的类型可以是B树索引或者位图索引。
用于具体的应用程序或者程序模块。
用于聚簇表。
用于散列聚簇。
原文:https://blog.51cto.com/lishiyan/2674843