【it168技術文檔】1、用exists替代in,not exists替代not in: 在子查詢中,not在許多基于基礎表的查詢中,為了滿足一個條件,往往需要對另一個表進行聯接.在這種情況下,使用exists(或notexists)通常将提高查詢的效率.
2、用where子句替換having子句:
避免使用having子句, having隻會在檢索出所有記錄之後才對結果集進行過濾.
這個處理需要排序,總計等操作.如果能通過where子句限制記錄的數目,那就能減少這方面的開銷.
例如:
低效:
高效
3、使用表的别名(alias)
當在sql語句中連接配接多個表時,請使用表的别名并把别名字首于每個column上.這樣一來,就可以減少解析的時間并減少那些由column歧義引起的文法錯誤.
4、用exists替換distinct
當送出一個包含一對多表資訊(比如部門表和雇員表)的查詢時,避免在select子句中使用distinct.一般可以考慮用exist替換
例如:
低效:
高效:
低效:
高效
(高效,執行時間10.6秒)
8、計算記錄條數 和一般的觀點相反,
count(*) 比count(1)稍快 ,
當然如果可以通過索引檢索,對索引列的計數仍舊是最快的. 例如 count(empno)