SQL语句优化技术分析(2)

本文介绍SQL语句优化的方法,包括如何避免使用函数处理字段以利用索引、如何优化字段的运算,以及如何通过提示来改进执行路径。此外还讨论了何时不应使用提示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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执行分析方面已经比较成熟,如果分析执行的路径不对首先应在数据库结构(主要是索引)、服务器当前性能(共享内存、磁盘文件碎片)、数据库对象(表、索引)统计信息是否正确这几方面分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值