ORACLE SQL语句优化技术分析(三)

日期: 2008-06-16 作者:yzsind 来源:TechTarget中国

  询表顺序的影响


    在FROM后面的表中的列表顺序会对SQL执行性能影响,在没有索引及ORACLE没有对表进行统计分析的情况下ORACLE会按表出现的顺序进行链接,由此因为表的顺序不对会产生十分耗服务器资源的数据交叉。(注:如果对表进行了统计分析,ORACLE会自动先进小表的链接,再进行大表的链接)


    SQL语句索引的利用


    对操作符的优化(见上节)


    对条件字段的一些优化


    采用函数处理的字段不能利用索引,如:


    substr(hbs_bh,1,4)=’5400’,优化处理:hbs_bh like ‘5400%’


    trunc(sk_rq)=trunc(sysdate), 优化处理:


    sk_rq>=trunc(sysdate) and sk_rq<trunc(sysdate+1)


    进行了显式或隐式的运算的字段不能进行索引,如:


    ss_df+20>50,优化处理:ss_df>30


    ‘X’||hbs_bh>’X5400021452’,优化处理:hbs_bh>’5400021542’


    sk_rq+5=sysdate,优化处理:sk_rq=sysdate-5


    hbs_bh=5401002554,优化处理:hbs_bh=’ 5401002554’,注:此条件对hbs_bh 进行隐式的to_number转换,因为hbs_bh字段是字符型。


    条件内包括了多个本表的字段运算时不能进行索引,如:


    ys_df>cx_df,无法进行优化


    qc_bh||kh_bh=’5400250000’,优化处理:qc_bh=’5400’ and kh_bh=’250000’


    应用ORACLE的HINT(提示)处理


    提示处理是在ORACLE产生的SQL分析执行路径不满意的情况下要用到的。它可以对SQL进行以下方面的提示


    目标方面的提示:


    COST(按成本优化)


    RULE(按规则优化)


    CHOOSE(缺省)(ORACLE自动选择成本或规则进行优化)


    ALL_ROWS(所有的行尽快返回)


    FIRST_ROWS(第一行数据尽快返回)


    执行方法的提示:


    USE_NL(使用NESTED LOOPS方式联合)


    USE_MERGE(使用MERGE join方式联合)


    USE_HASH(使用HASH join方式联合)


    索引提示:


    INDEX(TABLE INDEX)(使用提示的表索引进行查询)


    其它高级提示(如并行处理等等)


    ORACLE的提示功能是比较强的功能,也是比较复杂的应用,并且提示只是给ORACLE执行的一个建议,有时如果出于成本方面的考虑ORACLE也可能不会按提示进行。根据实践应用,一般不建议开发人员应用ORACLE提示,因为各个数据库及服务器性能情况不一样,很可能一个地方性能提升了,但另一个地方却下降了,ORACLE在SQL执行分析方面已经比较成熟,如果分析执行的路径不对首先应在数据库结构(主要是索引)、服务器当前性能(共享内存、磁盘文件碎片)、数据库对象(表、索引)统计信息是否正确这几方面分析。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

yzsind
yzsind

相关推荐