在尝试理解SQL语句的执行方式时,有时建议您查看解释计划.在解释(理解)解释计划时应该经历的过程是什么?应该突出的是,"哦,这真的很棒吗?" 与"哦不,那不对."
每当我看到评论说完整的桌面卡坏并且索引访问是好的时候,我就会不寒而栗.全表扫描,索引范围扫描,快速完整索引扫描,嵌套循环,合并连接,散列连接等只是分析人员必须理解的访问机制,并结合数据库结构的知识和查询的目的.为了得出任何有意义的结论.
完全扫描只是读取数据段(表或表(子)分区)的大部分块的最有效方式,虽然它通常可以指示性能问题,但仅在上下文中它是否是实现查询目标的有效机制.作为一个数据仓库和BI人,我的第一个性能警告标志是基于索引的访问方法和嵌套循环.
因此,对于如何阅读解释计划的机制,Oracle文档是一个很好的指南:http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/ex_plan.htm#PFGRF009
还要通过"性能调优指南"仔细阅读.
还有一个google用于"基数反馈",这是一种技术,其中解释计划可用于将查询中各个阶段的基数估计与执行期间经历的实际基数进行比较.我相信Wolfgang Breitling是这种方法的作者.
所以,底线:了解访问机制.理解数据库.理解查询的意图.避免经验法则.
在这样的问题中,这个主题太大了,无法回答.您应该花些时间阅读Oracle的性能调优指南
下面的两个示例显示了使用INDEX的FULL扫描和FAST扫描.
最好专注于您的成本和基数.查看示例,索引的使用降低了运行查询的成本.
它有点复杂(我没有100%的处理)但基本上Cost是CPU和IO成本的函数,而基数是Oracle期望解析的行数.减少这两者是一件好事.
不要忘记查询和Oracle优化器模型(例如:COST,CHOOSE等)以及运行统计信息的频率会影响查询的成本.
例1:
SCAN http://docs.google.com/a/shanghainetwork.org/File?id=dd8xj6nh_7fj3cr8dx_b
示例2使用索引:
INDEX http://docs.google.com/a/fukuoka-now.com/File?id=dd8xj6nh_9fhsqvxcp_b
如前所述,请注意TABLE SCAN.你通常可以避免这些.