【性能优化案例】执行计划宁可走全表扫描,也不走索引
2013-07-24 16:22
501 查看
准备信息:
表:TABLE1,有一列为SEQ_ORD。
索引:在SEQ_ORD列上有一个NORMAL索引NONUNI_INDEX【nonunique】
问题:
测试语句:
SELECT SUM(SEQ_ORD) FROM TABLE1 WHERE SEQ_ORD>100;
第一次运行的时候,发现执行计划走的是全表扫描,并没有走索引。执行计划如下图:
[align=left] [/align]
于是,我在语句中添加了/*+INDEX(TABLE1 NONUNI_INDEX)*/的提示,让优化器能够走索引。执行计划如下图:
[align=left] [/align]
比较一下,这两个图,发现有三个特点:
1、走索引扫描的时候,所花费的成本明显比走全表扫描的要多;
2、走索引扫描的时候,单是索引的扫描成本只有181,不是很高,但是却在利用ROWID扫描表数据的时候,耗费了相当多的成本。
分析一下,可能是不是索引的问题。于是,查了一下这个索引的聚簇因子,发现果然很高。
select ind.index_name,ind.clustering_factor,tab.blocks,tab.num_rows from user_indexes ind,user_tables tab where ind.table_name = tab.table_name and tab.table_name = 'TABLE1' AND ind.index_name = 'NONUNI_INDEX';
于是,我重建了索引,在运行语句的时候,性能就有了很大的提高。执行计划,如下图:
[align=left] [/align]
表:TABLE1,有一列为SEQ_ORD。
索引:在SEQ_ORD列上有一个NORMAL索引NONUNI_INDEX【nonunique】
问题:
测试语句:
SELECT SUM(SEQ_ORD) FROM TABLE1 WHERE SEQ_ORD>100;
第一次运行的时候,发现执行计划走的是全表扫描,并没有走索引。执行计划如下图:
[align=left] [/align]
于是,我在语句中添加了/*+INDEX(TABLE1 NONUNI_INDEX)*/的提示,让优化器能够走索引。执行计划如下图:
[align=left] [/align]
比较一下,这两个图,发现有三个特点:
1、走索引扫描的时候,所花费的成本明显比走全表扫描的要多;
2、走索引扫描的时候,单是索引的扫描成本只有181,不是很高,但是却在利用ROWID扫描表数据的时候,耗费了相当多的成本。
分析一下,可能是不是索引的问题。于是,查了一下这个索引的聚簇因子,发现果然很高。
select ind.index_name,ind.clustering_factor,tab.blocks,tab.num_rows from user_indexes ind,user_tables tab where ind.table_name = tab.table_name and tab.table_name = 'TABLE1' AND ind.index_name = 'NONUNI_INDEX';
于是,我重建了索引,在运行语句的时候,性能就有了很大的提高。执行计划,如下图:
[align=left] [/align]
相关文章推荐
- 第六章——根据执行计划优化性能(2)——查找表/索引扫描
- 第六章――根据执行计划优化性能(2)――查找表/索引扫描
- ORACLE实际执行计划与预估执行计划不一致性能优化案例
- 优化 SQL Server 查询性能----分析执行计划,索引与索引视图,如何识别要优化的查询
- mysql查缺补漏(二)mysql5.6性能优化(explain执行计划术语,索引,优化查询)
- 优化 SQL Server 查询性能----分析执行计划,索引与索引视图,如何识别要优化的查询
- 类型转换导致执行计划不走索引测试案例
- 第六章——根据执行计划优化性能(2)——查找表/索引扫描
- MongoDB性能篇 - 索引,explain执行计划,优化器profile,性能监控mongosniff
- 《高性能SQL调优精要与案例解析》一书谈主流关系库SQL调优(优化&TUNING)技术精髓之——执行计划获取及理解
- SQL SERVER 2012 执行计划走嵌套循环导致性能问题的案例
- oracle 性能优化操作十八: 决定使用全表扫描还是使用索引
- Oracle性能优化-读懂执行计划
- Mysql性能优化案例研究 - 覆盖索引和SQL_NO_CACHE
- 第六章——根据执行计划优化性能(2)——查找表/索引扫描
- oracle的SQL性能优化之常用的执行计划分析
- 第六章——根据执行计划优化性能(2)——查找表/索引扫描
- MongoDB性能篇 -创建索引,组合索引,唯一索引,删除索引和explain执行计划
- sql server 数据库优化--显示执行计划 你真的知道索引使用???
- 优化---利用pl/sql执行计划评估SQL语句的性能简析