Oracle SQL 优化(一点一点来)

SQL Tuning(10g)

1.    使用AND=来构造谓语

为了提高SQL的执行效率,在任何可能的时候使用等值连接

2.避免改变WHERE子句中的列

 

       在索引列上使用表达式(包括函数),将会导致优化器忽略该列上的索引,除非该列上定义的为基于函数的索引,所以应该将函数写在相对的位置上

       e.empno为数值索引列

select * from emp e where e.empno=1001;使用索引

select * from emp e where e.empno=to_number('1001');使用索引

select * from emp e where e.empno||''=1001;不使用索引

select * from emp e where to_char(e.empno)='1001';不使用索引

      还需要注意,当右端函数中出现列名时(不管是否为索引列),索引同样会失效:

      e.ename为字符索引列

      select * from emp e where e.ename=nvl('test',e.ename);不使用索引

select * from emp  where ename=nvl('test','111');使用索引

      要小心隐式的类型转换:

      select * from emp e where e.ename=123;

      下面是执行计划下的谓词信息:

      1 - filter(TO_NUMBER("E"."ENAME")=123)

      可以看出oralce会隐式的将列转换为数值类型,这时候索引失效,无论何时应该显示的进行类型转换来防止此种情况的发生

3.自己的总结

    1.禁止对列的操作,如果对列进行操作,不仅不会使用索引,还会增加不必要的开销,这个开销在很多时候对性能影响很大

  2.如何要建立索引,在数据选择性高的列上建立索引是一个指导。

  3.优化思路:减少对远端对象的访问,将单条操作转化为批量操作,尽量减少交互数等 (PL/SQL)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值