考试网 >> IT认证 >> Oracle >> Oracle指导 >> 通过分析SQL语句的执行计划优化SQL

通过分析SQL语句的执行计划优化SQL

发布时间:2006-06-28 10:05     点击:
分页:上一页  1 2 3 4 5 6 7 8 9 [10]  下一页  后10页

  上面是枯燥的假设数据,现在以具体的实例给予验证:

  环境: oracle 817 + linux + 阵列柜,表SWD_BILLDETAIL有3200多万数据;

  表的id列、cn列上都有索引

  经查看执行计划,发现执行select count(id) from SWD_BILLDETAIL;使用全表扫描,执行完用了大约1.50分钟(4次执行取平均,每次分别为1.45 1.51 2.00 1.46)。而执行select count(id) from SWD_BILLDETAIL where cn <'6';却用了2个小时还没有执行完,经分析该语句使用了cn列上的索引,然后利用查询出的rowid再从表中查询数据。我为什么不使用select count(cn) from SWD_BILLDETAIL where cn <'6';呢?后面在分析执行路径的索引扫描时时会给出说明。

  下面就是基于规则的优化器使用的执行路径与各个路径对应的等级:

  RBO Path 1: Single Row by Rowid(等级最高)

  RBO Path 2: Single Row by Cluster Join

  RBO Path 3: Single Row by Hash Cluster Key with Unique or Primary Key

  RBO Path 4: Single Row by Unique or Primary Key

  RBO Path 5: Clustered Join

  RBO Path 6: Hash Cluster Key

  RBO Path 7: Indexed Cluster Key

  RBO Path 8: Composite Index

  RBO Path 9: Single-Column Indexes

  RBO Path 10: Bounded Range Search on Indexed Columns

  RBO Path 11: Unbounded Range Search on Indexed Columns

  RBO Path 12: Sort Merge Join

  RBO Path 13: MAX or MIN of Indexed Column

  RBO Path 14: ORDER BY on Indexed Column

  RBO Path 15: Full Table Scan(等级最低)

  上面的执行路径中,RBO认为越往下执行的代价越大,即等级越低。在RBO生成执行计划时,如果它发现有等级高的执行路径可用,则肯定会使用等级高的路径,而不管任何其它影响性能的元素,即RBO通过上面的路径的等级决定执行路径的代价,执行路径的等级越高,则使用该执行路径的代价越小。如上面2个例子所述,如果使用RBO,则肯定使用索引访问表,也就是选择了比较差的执行计划,这样会给数据库性能带来很大的负面影响。为了解决这个问题,从ORACLE 7开始oracle引入了基于代价的优化器,下面给出了介绍。
分页:上一页  1 2 3 4 5 6 7 8 9 [10]  下一页  后10页
版权申明:未经书面授权请勿转载本站信息!!作品版权归所属媒体与作者所有!!
发表评论: 匿名发表 用户名: 查看评论
您将承担一切因您的行为、言论而直接或间接导致的民事或刑事法律责任
留言板管理人员有权保留或删除其管辖留言中的任意内容
本站提醒:不要进行人身攻击。谢谢配合。
在本站搜索相关信息
2003-2005 Ksw123.com All Rights Reserved. - TOP
Copyright © 2006 Ksw123.com. All rights reserved.中国考题网 版权所有