Oracle 索引

Oracle 索引

主题

 

  • 索引意义
  • 索引特点
  • 索引优点
  • 索引缺点
  • 使用索引的注意事项

 

索引意义

建立索引的意义,是为了在海量数据的情况下,提高数据的检索速度;

 

索引特点

索引树的高度较低。0层索引存放的是索引列的值和rowid,1层及以上索引存放的是索引块的指针。

索引里存放的是rowid和索引列的值,rowid存放的是索引所指向的行记录的物理地址。

索引是有序的。

 

索引优点

索引使用BTree数据结构,BTree有较快的查找算法,可以大大提高数据的检索速度。

索引是有序的,分组和排序的时可以减少排序时间。

索引比要检索或者排序的表小很多,足够在内存中一次性读取。通过索引确定了数据位置,可以直接读取磁盘中的数据块,减少磁盘IO操作。

 

索引缺点

索引是有序的,创建和维护索引的有序开销比较大。

索引只存储了索引列的值,存在回表查询的问题。

 

使用索引的注意事项

索引应该建在常用的连接的列上,主要是一些外健,可以加快连接速度。

索引应该建立在经常查询的列上,加快检索速度。

索引应该建立在经常需要排序的列上,因为索引是有序的。

索引应该建立在经常使用在where字句的列上,加快条件的判断。

 

索引的数量应该恰当,要合理控制索引的数量,索引的创建和维护开销大。

索引会影响更新。对表记录进行更新操作,会影响索引,需要维护索引的有序,开销大。insert操作,索引越多,插入越慢;delete操作,海量数据定位删除情况下,有索引较快,删除大量数据时有性能问题;update操作需快速定位,且修改不影响索引,性能影响较小。

查询返回大量字段时,索引效果不好,因为存在回表查询问题,比全表扫描的IO次数更多。尽可能去掉不必要的字段,若还有多个必要字段,采用组合索引可以避免回表。

组合索引的索引列数量最好不要超过三个。若都是等值查询,索引列顺序无影响。若有等值和范围查询,则等值查询在前,范围查询在后。

如果单列索引和组合索引的前置列一样,可以不建立单列索引。

频繁修改的列不应该建立索引,检索性能和修改性能是相互矛盾的。

创建索引时会把整张表锁住,创建完才释放锁。

 

设置分区索引,却用不到分区条件上,性能将下降。

位图索引建立在重复度低的列上,和频繁更新的表上,会有很大的性能问题。BTree树索引存储的是列值,位图索引存储的是比特值,所以位图索引体积小。唯一值越少越容易锁定,所以位图索引更新慢,会锁住。

在max,min列上建立索引,性能有很大的提升。因为索引是有序的,可以直接在头和尾处找到需要的最小值和最大值。

distinct去重操作影响性能,在插入数据时就确保不插入重复数据。

count统计操作,在统计列上建立索引会提高统计速度。

列运算会让索引失效,尽可能避免在索引列上进行列运算,可以转换成普通的SQL写法。

进行优化时,要考虑SQL语句的执行频率和重要性。

 

 

 

 

 

 

posted @ 2014-05-11 22:13  游园惊梦  阅读(218)  评论(0编辑  收藏  举报