暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle SQL性能优化40条(七)

原创 18626038518 2022-07-25
422

24. 用 >= 替代 >
如果DEPTNO上有一个索引
/*高效SQL*/SELECT * FROM EMPWHERE DEPTNO >=4
/*低效SQL*/SELECT * FROM EMPWHERE DEPTNO >3
两者的区别在于,前者DBMS将直接跳到第一个DEPT等于4的记录,而后者将首先定位到DEPTNO等于3的记录并且向前扫描到第一个DEPT大于3的记录.
25. 用Union替换OR(适用于索引列)
通常情况下,用UNION替换WHERE子句中的OR将会起到较好的效果。对索引列使用OR将造成全表扫描。注意,以上规则只针对多个索引列有效。
/*高效SQL*/SELECT LOC_ID , LOC_DESC , REGIONFROM LOCATIONWHERE LOC_ID = 10UNION SELECT LOC_ID , LOC_DESC , REGIONFROM LOCATIONWHERE REGION = 'MELBOURNE'
/*低效SQL*/SELECT LOC_ID,LOC_DESC,REGIONFROM LOCATIONWHERE LOC_ID = 10 OR REGION = 'MELBOURNE'
26. 用IN替换OR
/*低效SQL*/SELECT * FROM LOCATIONWHERE LOC_ID = 10OR LOC_ID = 20OR LOC_ID = 30
/*高效SQL*/SELECT * FROM LOCATIONWHERE LOC_IN IN (10,20,30)
实际的执行效果还须检验,在ORACLE8i下, 两者的执行路径似乎是相同的。
27. 避免在索引列上使用is null和is not null
避免在索引中使用任何可以为空的列,ORACLE将无法使用该索引。
/*低效SQL:(索引失效)*/SELECT * FROM DEPARTMENTWHERE DEPT_CODE IS NOT NULL;
/*高效SQL:(索引有效)*/SELECT * FROM DEPARTMENTWHERE DEPT_CODE >=0;

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论