SQL優化常用方法19

inzaghi1984發表於2017-12-14
  1. 用NOT EXISTS替代NOT IN
    在子查詢中,NOT IN子句將執行一個內部的排序和合並. 無論在哪種情況下,NOT IN都是最低效的 (因為它對子查詢中的表執行了一個全表遍歷). 為了避免使用NOT IN ,我們可以把它改寫成外連線(Outer Joins)或NOT EXISTS.

例如:
SELECT … FROM EMP
WHERE DEPT_NO NOT IN (SELECT DEPT_NO FROM DEPT WHERE DEPT_CAT=`A`);
為了提高效率.改寫為:
(方法一: 高效)
SELECT …. FROM EMP A,DEPT B
WHERE A.DEPT_NO = B.DEPT(+) AND B.DEPT_NO IS NULL AND B.DEPT_CAT(+) = ‘A`
(方法二: 最高效)
SELECT …. FROM EMP E WHERE NOT EXISTS (SELECT ‘X` FROM DEPT D
WHERE D.DEPT_NO = E.DEPT_NO AND DEPT_CAT = ‘A`);


相關文章