日期:2014-05-16  浏览次数:20368 次

Oracle优化记录之一(Where条件顺序)

Where子句的条件的顺序

由于Oracle解析Where查询条件是自左向左,自下而上进行的。所以,可以过滤越多记录的条件越应该往后面移动。最大限制的Where子句放在句末。

--摘录
-- (低效,执行时间156.3秒)
SELECT … 
FROM EMP E
WHERE  SAL > 50000
AND    JOB = ‘MANAGER’
AND    25 < (SELECT COUNT(*) FROM EMP
             WHERE MGR=E.EMPNO);

-- (高效,执行时间10.6秒)

SELECT … 
FROM EMP E
WHERE 25 < (SELECT COUNT(*) FROM EMP
             WHERE MGR=E.EMPNO)
AND    SAL > 50000
AND    JOB = ‘MANAGER’; 
?