Oracle 索引

Oracle 索引算法

主题数据结构

 

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

 

索引意义性能

创建索引的意义,是为了在海量数据的状况下,提升数据的检索速度;优化

 

索引特色spa

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

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

索引是有序的。索引

 

索引优势内存

索引使用BTree数据结构,BTree有较快的查找算法,能够大大提升数据的检索速度。ci

索引是有序的,分组和排序的时能够减小排序时间。

索引比要检索或者排序的表小不少,足够在内存中一次性读取。经过索引肯定了数据位置,能够直接读取磁盘中的数据块,减小磁盘IO操做。

 

索引缺点

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

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

 

使用索引的注意事项

索引应该建在经常使用的链接的列上,主要是一些外健,能够加快链接速度。

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

索引应该创建在常常须要排序的列上,由于索引是有序的。

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

 

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

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

查询返回大量字段时,索引效果很差,由于存在回表查询问题,比全表扫描的IO次数更多。尽量去掉没必要要的字段,若还有多个必要字段,采用组合索引能够避免回表。

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

若是单列索引和组合索引的前置列同样,能够不创建单列索引。

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

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

 

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

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

在max,min列上创建索引,性能有很大的提高。由于索引是有序的,能够直接在头和尾处找到须要的最小值和最大值。

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

count统计操做,在统计列上创建索引会提升统计速度。

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

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

相关文章
相关标签/搜索