1. 程式人生 > 其它 >Oracle查詢優化經驗

Oracle查詢優化經驗

1.ORACLE採用自下而上的順序解析WHERE子句,根據這個原理,表之間的連線必須寫在其他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’;

2.選擇最有效率的表名順序(只在基於規則的優化器中有效)重點關注 ORACLE的解析器按照從右到左的順序處理FROM子句中的表名,因此FROM子句中寫在最後的表(基礎表 driving table)將被最先處理. 在FROM子句中包含多個表的情況下,你必須選擇記錄條數最少的表作為基礎表.當ORACLE處理多個表時, 會運用排序及合併的方式連線它們.首先,掃描第一個表(FROM子句中最後的那個表)並對記錄進行派序,然後掃描第二個表(FROM子句中最後第二個表),最後將所有從第二個表中檢索出的記錄與第一個表中合適記錄進行合併.

例如:

表 TAB1 16,384 條記錄

表 TAB2 1 條記錄

選擇TAB2作為基礎表 (最好的方法)

3.用子查詢替代左關聯