天天看點

關于簡單的SQL優化

如果用到了子查詢作為參數,那麼使用EXISTS代替IN,EXISTS速度更快的原因:EXISTS可以用到索引,加快查找速度,并且EXISTS隻要查到一行資料滿足條件就會終止查詢,不會進行全表掃描

如果經常對某一個字段進行排序的話,那麼請建立索引

用EXISTS代替DISTINCT,可以避免排序

能在WHERE子句中過濾的條件不要寫到HAVING子句中,因為先通過WHERE進行過濾之後,會減少資料的行數,減少資料量

在進行空值判斷的時候不會使用索引,需要注意,但是如果将NULL等同于0,那麼就将空值判斷轉化成了是否為0的檢測,就可以使用索引了

在使用不等号<>  時也會跳過索引

使用索引時,條件表達式的左側應該是原始字段,比如 我在number字段上建立了索引,那麼 where number*1.1>100這種寫法不會用到索引,應該寫為where number >100/1.1

盡量減少沒有的中間表(臨時表)的生成

合理的使用視圖,視圖存儲的是一些SQL語句,當代碼中出現大量的視圖時,其實是嵌套了多個子查詢,代碼執行效率可想而知,如果定義視圖的語句中包含聚合函數,集合運算時 代碼的執行效率也會非常低

如果是平時在學校中寫寫實驗,表裡隻有那麼十行八行的資料,可能優化的效果看不出來,但是不要因為這樣就放棄好的習慣,要不然當操作大量的資料時就會追悔莫及