oracle exists有用到索引,oracle数据库sql的优化总结

一:使用where少使用having;

二:查两张以上表时,把记录少的放在右边;

三:减少对表的访问次数;

四:有where子查询时,子查询放在最前;

五:select语句中尽量避免使用*(执行时会把*依次转换为列名);

六:尽量多的使用commit;

七:Decode可以避免重复扫描相同的记录或重复连接相同的表;

八:通过内部函数也可提高sql效率;

九:连接多个表时,使用别名并把别名前缀于每个字段上;

十:用exists代替in

十一:not exists代替 not in(not in 字句将执行一个内部的排序和合并,任何情况下,not in是最低效的,子查询中全表扫描了。为了避免使用not in,可以改写成outer joins或not exists);

十二:表连接比exists更高效;

十三:用exists替换distinct

例:

低:                                                                    高:

select distinct dept_no, dept_name                        select dept_no, dept_name

from dept d, emp e                                               from dept d

where d.dept_no = e.dept_no;                               where exists (select 1 from emp e where e.dept_no = d.dept_no);

十四:使用TKPROF工具来查询sql性能状态;

十五:用索引提高效率(代价是:索引需要空间,而且定期重构索引很有必要:ALTER INDEX REBUILD 20 AND EMP_CAT = 'A';

(在两个非唯一性索引前提下)此时范围索引不被使用,通过EMP_CAT索引查询出记录再与DEPT_NO条件进行比较

注意:唯一性所以做范围比较时,等级要比非唯一性索引的等式比较低;

二十:强制索引失效:

如果两个或两个以上索引具有相同的等级,可以强制命令oracle优化器使用其中的一个。 那何时使用此种策略呢?如果一个索引已接近于唯一,而另一索引有很多重复的值,排序与合并反而会成为负担,此时可以屏蔽后者使其索引失效。

(失效方式:对索引列加入计算'+0'或'||""');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值