提高SQL執行效率的幾點建議:
盡量不要在where中包含子查詢;
關於時間的查詢盡量不要寫成where to_char(dif_dateyyyymmdd)=to_char(yyyymmdd);
在過濾條件中可以過濾掉最大數量記錄的條件必須放在where子句的末尾;
FROM子句中寫在最後的表(基礎表driving table)將被最先處理在FROM子句中包含多個表的情況下你必須選擇記錄條數最少的表作為基礎表如果有三個以上的連接查詢那就需要選擇交叉表 (intersection table)作為基礎表交叉表是指那個被其他表所引用的表;
采用綁定變量
在WHERE中盡量不要使用OR
用EXISTS替代IN用NOT EXISTS替代NOT IN;
避免在索引列上使用計算WHERE SAL*>;
用IN來替代OR WHERE LOC_ID= OR LOC_ID= OR LOC_ID=
避免在索引列上使用IS NULL和IS NOT NULL;
總是使用索引的第一個列;
用UNIONALL替代UNION;
避免改變索引列的類型SELECTFROM EMP WHERE EMPNO=由於隱式數據類型轉換to_char(EMPNO)=因此將不采用索引一般在采用字符串拼湊動態SQL語句出現;
!= 將不使用索引;
優化GROUP BY;
避免帶有LIKE參數的通配符LIKE YE%使用索引但LIKE %YE不使用索引
避免使用困難的正規表達式例如select * from customer where zipcode like ___即便在zipcode上建立了索引在這種情況下也還是采用順序掃描的方式如果把語句改成select * from customer where zipcode>在執行查詢時就會利用索引來查詢顯然會大大提高速度;
盡量明確的完成SQL語句盡量少讓數據庫工作比如寫SELECT語句時需要把查詢的字段明確指出表名盡量不要使用SELECT *語句組織SQL語句的時候盡量按照數據庫的習慣進行組織
From:http://tw.wingwit.com/Article/program/MySQL/201311/29573.html