让SQL程序更快的运行:语句优化分析(2)

来源:百度文库 编辑:神马文学网 时间:2024/10/02 16:45:29
让SQL程序更快的运行:语句优化分析 (2)
作者:depha 来源:赛迪论坛 发布时间:2006.01.06
【Java专区】 【安全专区】 【网管专区】 【linux专区】 【进入论坛】 【IT博客】

sql语句索引的利用 对条件字段的一些优化 采用函数处理的字段不能利用索引,如: substr(hbs_bh,1,4)=’5400’,优化处理:hbs_bh like ‘5400%’ trunc(sk_rq)=trunc(sysdate), 优化处理: sk_rq>=trunc(sysdate) and sk_rq 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执行分析方面已经比较成熟,如果分析执行的路径不对首先应在数据库结构(主要是索引)、服务器当前性能(共享内存、磁盘文件碎片)、数据库对象(表、索引)统计信息是否正确这几方面分析。 (T127)
_xyz