Oracle 索引介绍

Oracle 创建索引要做到三个适当:即 在适当的表上适当的列上创建 适当数量的索引。

具体的来说,要做到这个三个适当有如下几个要求。

一、根据表的大小来创建索引
虽然给表创建索引,可以提高查询的效率。但是数据库管理员需要注意的是,索引也需要一定的开销的。为此并不是说给所有的表都创建索引,那么就可以提高数据库的性能。恰恰相反,如果不管三七二十一,给所有的表都创建了索引,那么其反而会给数据库的性能造成负面的影响。因为此时滥用索引的开销可能已经远远大于由此带来的性能方面的收益。所以,数据库管理员首先需要做到,为合适的表来建立索引,而不是为所有的表建立索引。

一般来说,不需要为比较小的表创建索引,而对于大表的话,则需要进行实际情况实际分析。简单一点的,可以根据大致的比率来确定。

二、根据列的特征来创建索引
列的特点不同,索引创建的效果也不同。数据库管理员需要了解为哪些列创建索引可以起到事倍功半的效果。同时也需要了解为哪些列创建索引反而起到的是事倍功半的效果。

三、在一个表上创建多少索引合适
通常来说,表的索引越多,其查询的速度也就越快。但是,表的更新速度则会降低。因此,要找到一个合适的平衡点。

索引类型介绍
1,B*树索引(B*Tree Index)
   B*树索引就是我们常说的'传统'的索引。B*树索引结构中,所有的叶子都在同一层中,整个索引结构数据块的层数称之为索引的高度(Height),因此,无论根据索引查找表中的哪一条记录,所执行的I/O次数都是相同的。这就是B*树索引中的‘B’的含义,即Balance(平衡)之意。换句行话说,B*树索引是高度平衡的(Height Balanced)。另外一个术语是分支层数(Blevel),他等于Height-1。

B*树索引子类:
1)反向键索引
反向键索引是一种将索引键‘反转’的B*树索引,通过把键‘反转’,将本来连续的键值变得非常‘离散’,这些本来应该放在一个索引数据块上的连续键值(一般有序列或者时间戳产生)会被分散到不同的索引块上,从而避免索引块争用的问题。
2)降序索引
3)压缩键索引
   B*树索引的压缩只能应用于复合索引。压缩键复合索引(Compressed Key Index)的基本概念是:把每个索引键条目分解为两个部分:前缀(Prefix)和后缀(Postfix)。前缀是指复合索引中具有大量重复值的部分,余下的索引条目中唯一的部分就是后缀。
压缩键索引不仅能起到节约存储空间的作用,而且还能有效调高DML操作的效率。但是,需要注意的是:如果你的系统是一个CPU繁忙的系统,那么再使用压缩键索引只能适得其反,这会减慢你的处理速度(因为压缩键索引的数据结构更加复杂,他会额外增加CPU的工作量)。如果你的系统I/O比较繁忙,那么使用压缩键索引会加快处理速度。所以,压缩键使用与否一定要视你的系统实际情况而定。
总结:
a,压缩索引使得索引变小,因而能加速数据的检索
b,一定要考虑复合索引中各列的顺序,把重复值较多的列放在索引前部(前缀)
c,在并发性较高的系统中,压缩键索引会潜在的锁住更多的行数据,从而导致系统的DML性能较差,因此,建议在高并发性的系统中不要使用压缩索引

2,位图索引(Bitmap Index)
   位图索引的目的是提供一个指向所给键值对应数据行的指针(RowID)。在普通的索引中,这是通过存储每一个键值对应数据行的ROWID来实现的,通常索引条目和数据行之间存在着一种一对一的关系:一个索引条目就指向一行。而对于位图索引,他使用键值的位图来取代普通索引的ROWID列表,一个位图索引条目可能会指向多行数据。位图索引适用于高度重复且通常只读的数据表。在OLTP系统中,由于存在着并发性的性能问题,所以不能考虑使用位图索引。而以‘只读’为主要特征的Data Warehouse/MIS/BI/OLAP应用是位图索引的首选。

使用位图索引的几个条件:
1,一般来说,位图对于低基数的单列(single-column indexs with low cardinality)索引比较有效,低基数列是指该列仅有少数不同的值。
2,位图索引在‘只读’(Read-only)或以读为主的低基数环境下会比B*树索引快

在一个数据仓库/MIS/BI等OLAP型应用系统中,合理的使用尽可能多的位图索引是非常有用的,但是在写密集型的OLTP型应用中,位图索引是极不合适的。

3,基于函数的索引(Function Based Index)
   基于函数的索引就是你可以在表字段上创建基于函数或者表达式的索引,他能有效提高where子句中含有函数的SQL语句的性能。他计算函数或者表达式的值,并把得到的值存储在索引中,然而,当Oracle在表上处理insert或则update语句的时候,他需要在维护基于函数的索引时额外增加了函数计算步骤,因此,可能会造成些微的性能下降。


猜你喜欢

转载自maosheng.iteye.com/blog/1921026