CTOCIO IT专家网

天极传媒 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
IT专家网搜索

数据库 | Oracle | DB2 | SQL Server | MySQL | 商业智能 | BI | DBA | Sybase| SQL Server 2008

您现在的位置: IT专家网 > 数据库子站 > 数据库技巧

优化SQL的另一种思维6 其它注意事项

作者: Peak Wong,  出处:IT专家网, 责任编辑: 李书琴, 
2008-03-17 09:08
  优化SQL的另一种思维系列文章是作者用了快一年的时间完成的SQL优化文章,它的原理实际上是通过分析SQL语句的执行计划来实现对整体SQL进行优化的,这是多年项目经验的总结,由于考虑到目前国内的Oracle部署还基本维持在Oracle 8 和Oracle 9的水平上,所以里面的模拟环境都是在Oracle 8.3下进行的,希望可以针对性更强一些。本文是系列连载的第六章:其它注意事项。

  《优化SQL的另一种思维目录

  一、性能调整综述

  二、有效的应用设计

  三、SQL语句处理的过程

  四、ORACLE的优化器

  五、ORACLE的执行计划

    背景知识

    访问路径(方法) -- access path

    表之间的连接

    如何产生执行计划

    如何分析执行计划

    如何干预执行计划 - - 使用hints提示

    具体测试实例

    具体案例分析

  六、其它注意事项

  七、整体实例分析

    客户端程序优化SQL步骤

    tkprof程序整体实例解说

  【IT专家网独家】

  1. 不要认为将optimizer_mode参数设为rule,就认为所有的语句都使用基于规则的优化器

  不管optimizer_mode参数如何设置,只要满足下面3个条件,就一定使用CBO

  1) 如果使用Index Only Tables(IOTs), 自动使用CBO.

  2) Oracle 7.3以后,如果表上的Paralle degree option设为>1,

  则自动使用CBO, 而不管是否用rule hints.

  3) 除rlue以外的任何hints都将导致自动使用CBO来执行语句

  总结一下,一个语句在运行时到底使用何种优化器可以从下面的表格中识别出来,从上到下看你的语句到底是否满足description列中描述的条件:

        Description                                                        对象是否被分析        优化器的类型
        ~~~~~~~~~~~                                                ~~~~~~~~~~~~        ~~~~~~~~~
        Non-RBO Object (Eg:IOT)                                n/a                                #1
        Parallelism > 1                                                n/a                                #1
        RULE hint                                                    n/a                                RULE
        ALL_ROWS hint                                                n/a                                ALL_ROWS
        FIRST_ROWS hint                                        n/a                                FIRST_ROWS
        *Other Hint                                                        n/a                                #1
        OPTIMIZER_GOAL=RULE                         n/a                                RULE
        OPTIMIZER_GOAL=ALL_ROWS                n/a                                ALL_ROWS
        OPTIMIZER_GOAL=FIRST_ROWS                n/a                                FIRST_ROWS
        OPTIMIZER_GOAL=CHOOSE                        NO                                RULE
        OPTIMIZER_GOAL=CHOOSE                        YES                        ALL_ROWS

  #1 表示除非OPTIMIZER_GOAL 被设置为FIRST_ROWS ,否则将使用ALL_ROWS。在PL/SQL中,则一直是使用ALL_ROWS

  *Other Hint 表示是指除RULE、ALL_ROWS 和FIRST_ROWS以外的其它提示

  2) 当CBO选择了一个次优化的执行计划时, 不要同CBO过意不去, 先采取如下措施:

  a) 检查是否在表与索引上又最新的统计数据

  b) 对所有的数据进行分析,而不是只分析一部分数据

  c) 检查是否引用的数据字典表,在oracle 10G之前,缺省情况下是不对数据字典表进行分析的。

  d) 试试RBO优化器,看语句执行的效率如何,有时RBO能比CBO产生的更好的执行计划

  e) 如果还不行,跟踪该语句的执行,生成trace信息,然后用tkprof格式化trace信息,这样可以得到全面的供优化的信息。

共2页。 1 2 :

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。
  • 周排行榜
  • 月排行榜

邮件订阅


    
天极服务 | 关于我们 | 网站律师 | 加入我们 | 联系我们 | 广告业务 | 友情链接 | 我要挑错
All Rights Reserved, Copyright 2004-2008, Ctocio.com.cn
渝ICP证B2-20030003号 如有意见请与我们联系 powered by 天极内容管理平台CMS4i