oracle11g基于SQL的优化之索引优化篇

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle11g 基于SQL语句性能优化通过索引对SQL进行优化

主讲人:***

所在部门:运维部

一、概述

本文所介绍的索引案例是在使用的是Oracle11g 11.2.0.4 数据库运行的。索引是使用最为普遍的一种优化SQL的方法,不同索引均有各自的优缺点。实际优化中需要综合考虑各种环境因素对运行慢的SQL进行优化。常见环境因素有:数据库表及索引的统计信息、列的柱状图,优化器的模式,表上是否有触发器,表上是否创建了物化视图日志,SQL语句是否使用提示符,当前会话的等待事件等。

Oracle数据库中索引可分为B-TREE索引、BitMap索引、全文索引三大类。按索引列的数量不同可分为,单列索引,多列索引。按列值是否唯一可分为唯一索引和非唯一性索引。

二、B-TREE索引

B-TREE索引常常用在OLTP数据库中,为了提高查询性,但同时一个表中索引数据多时会影响DML语句的性能,所以需要全面考虑增加索引后利弊。

2.1索引分类

主键索引、唯一键索引、非唯一键索引、多列组合索引。当表在创建主键时系统会自动为主键列或列的组合上创建唯一索引,主键索引性能最好。其它索引性能好坏取决于单列或多列的数据选择性,如果索引访问的数据小,性能相对较高,因为访问索引和表的块较少因而性能好。

2.2扫描方式

索引唯一扫描、索引范围扫描,全索引扫描,快速全索引扫描,索引跳跃扫描。

2.3上机实践

2.3.1 索引唯一扫描例子:

unique.txt

注意:由于唯一索引的列中可为空值。如果查询条件中有如下写法,则无法走索引扫描。因为b-tree索引中不存储空值。

(1)select * from tab where col is null

(2)select * from tab where col is not null

(3)select count(0) from tab;

其中(3)中的语句是否走索引取决于唯一索引的列上是否为非空,如果是非空,则会走“INDEX FAST FULL SCAN”快速索引扫描(采用并行索引扫描方式进行取读索引块,效率非常高)。

2.3.2 索引范围扫描例子

在非唯一性索引上的扫描通常都采用索引范围的扫描方式进行。

scan.txt scan2.txt

2.3.3 全索引扫描例子

全索引扫描指的是查询语句的所有列均在索引列中,同时需要访问全表的数据时使用。

indexfull.txt

2.3.4 快速全索引扫描例子

fast_fullscan.txt

2.3.5 索引跳跃扫描例子

skip.txt

2.4索引利弊

优点:当访问表中少量数据时可以提高查询的性能。

缺点:增加索引会降低DML语句的性能,尤其中表上索引多的时候尤为严重。

三、BitMap索引

位图索引常常用在在读为主的表中,准确地说是以读为主且创建位图索引的列上的唯一值较少的情况。位图索引用于提高单位查询速度或多表关联的查询速度,一般多用在报表统计中或数据仓库中。在DML操作的表中如果增加位图索引,不但不会提高查询性能,返而会因为位图索引锁的范围大而阻塞其它程序并发执行,使得其它运行运行变慢。

3.1索引分类

单列位图索引,多列位图索引。

3.2扫描方式

3.3上机实践

单位位图索引例子

多例位图索引例子

3.4索引利弊

优点:在只读表上的查询性能比B-TREE索引要高。因为B-TREE索引中记录的是位的位信息,占用空间小,因而查询性能高。

缺点:若在有写操作的表上创建位图索引,位图索引

四、全文域索引

三、总结

相关文档
最新文档