提高SQL執行效率的幾點建議:
◆儘量不要在where中包含子查詢;
關於時間的查詢,儘量不要寫成:where to_char(dif_date,'yyyy-mm-dd')=to_char('2007-07-01','yyyy-mm-dd');
◆在過濾條件中,可以過濾掉最大數量記錄的條件必須放在where子句的末尾;
FROM子句中寫在最後的表(基礎資料表,driving table)將被最先處理,在FROM子句中包含多個表的情況下,你必須選擇記錄條數最少的表作為基礎資料表。 如果有三個以上的連接查詢,那就需要選擇交叉表(intersection table)作為基礎資料表,交叉表是指那個被其他表所引用的表;
◆採用綁定變數
◆在WHERE中儘量不要使用OR
◆用EXISTS替代IN、用NOT EXISTS替代NOT IN;
◆避免在索引列上使用計算:WHERE SAL*12>25000;
◆用IN來替代OR: WHERE LOC_ID=10 OR LOC_ID=15 OR LOC_ID=20
◆避免在索引列上使用IS Null和IS NOT Null;
◆總是使用索引的第一個列;
◆用UNION-ALL替代UNION;
◆避免改變索引列的類型:SELECT... FROM EMP WHERE EMPNO='123',由於隱式資料類型轉換,to_char(EMPNO)='123',因此,將不採用索引,一般在採用字串拼湊動態SQL語句出現;
◆'!=' 將不使用索引;
◆優化GROUP BY;
◆避免帶有LIKE參數的萬用字元,LIKE '4YE%'使用索引,但LIKE '%YE'不使用索引
◆避免使用困難的正規運算式,例如select * from customer where zipcode like "98___",即便在zipcode上建立了索引,在這種情況下也還是採用順序掃描的方式。 如果把語句改成select * from customer where zipcode>"98000",在執行查詢時就會利用索引來查詢,顯然會大大提高速度;
◆儘量明確的完成SQL語句,儘量少讓資料庫工作。 比如寫SELECT語句時,需要把查詢的欄位明確指出表名。 儘量不要使用SELECT *語句。 組織SQL語句的時候,儘量按照資料庫的習慣進行組織