过着简单,真实的生活,喜欢收藏变形金刚(TFE,G1,SL系列),研究金融股市,KOF98,篮球,学习研究Oracle技术,我并不是一个全职的Oracle DBA,但是对于Oracle技术的热爱和研究,是一个不争的事实,愿意结交广大Oracle技术爱好者!MSN:oracle_kof_tf@hotmail.com
索引学习笔记-1(Oracle9i/10g编程艺术-深入数据库体系结构)
上一篇 /
下一篇 2008-03-27 15:42:01
/ 个人分类:Oracle数据库技术-数据库管理
索引是一个很宽泛的主题,他是开发人员和数据库DBA之间的一个桥梁,深刻理解索引是
数据库从业人员必须掌握的一个内容。在实际的开发应用中索引使用不当会导致一些系统性能的问题,如果有太多的索引,不仅维护起来极其麻烦,而且还会在一定程度上影响DML的性能,如果索引过少,又会对查询产生性能上的影响,因此找到一个适当的索引性能的平衡点,对应用的性能影响至关重要。
Oracle索引的概述
B*树索引:----------------
所谓传统的索引,也是Oracle和大多数数据库最常见的一种索引,B*数索引在一定程度上类似于二叉树,但并不是一颗二叉树。通过B*树索引可以根据索引条目或键中记录行的rowid迅速访问到相关的行或者行集。
B*树索引分为以下几种:
1.索引组织表(Index organized table) 这是表类中的一种,相比最常用Heap organized table,索引组织表中的数据是按照索引键的顺序来存储和排序的。在使用
SQL语句访问表的行为和Heap organized table一致。
2.B*树聚簇索引(B*tree cluster index) 用于对聚簇键建立索引,在传统的B*树索引中,键都指向一行,而对于B*树聚簇索引会指向一个块,这个块中包含与这个聚簇索引相关的多行
3.降序索引(descending index)此索引允许数据在索引结构中按照“从大到小”的顺序排序,而不是按“从小到大”的顺序排序。
4.反向键索引(reverse key index)这类索引其键中的字节值会反转存储,比如利用一个序列来生成主键,这个序列将生成诸如7071,7072,7073....类似的值。倘若我们使用一个传统的B*树索引的话,这些值就可能会放到同一个索引块上,这样就会加剧这一叶子结点块的热块竞争。如果此时利用反向键索引,那么Oracle就会逻辑的对1707,2707,3707....等建立索引,那么在将数据放在索引中之前,将先把所存储数据的字节反转,这样原本可能在索引中相邻放置的值在字节反转之后就会相距很远,通过反转字节,对索引的插入的数据就会放在多个块上。
位图索引(bitmap index):------------------------------------
在传统的B*树索引中,索引条目和数据行之间是一一对应的关系,对于位图索引来说,一个索引条目利用一个位图同时指向多行,因此位图索引适用于高度重复而且通常只读的数据
位图连接索引(bitmap join index):-----------------------------------------------------
函数索引(function-based index):---------------------------------------------
可以把基于函数的索引看成是一个虚拟列上的索引。这种索引可以用于加快诸如:
select * from t where function(my_column) = value;这样类似的查询。
其中function(my_column)是提前计算出来并存储在function-based index中.
应用域索引(application domain index):------------------------------------------------------
这是一种自行构建的索引,可能存储在Oracle中也可能存储在Oracle之外。Oracle Text Search的索引就是一个例子,有一点需要注意的是这里创建的索引并不一定需要使用传统的索引结构。
导入论坛
引用链接
收藏
分享给好友
推荐到圈子
管理
举报
TAG: