一、儘可能使用數字型字段數據庫
引擎在處理查詢會逐個比較字符串中每個字符,而對於數字型而言只須要比較一次就夠了;函數
二、儘可能避免使用!=或<>、IS NULL或IS NOT NULL、IN ,NOT IN等這樣的操做符.優化
由於這會使系統沒法使用索引,而只能直接搜索表中的數據;設計
三、不要習慣性的使用 ‘%L%’這種方式(會致使全表掃描),若是可使用`L%’相對來講更好;排序
四、能用UNION ALL就不要用UNION索引
UNION ALL不執行SELECT DISTINCT函數,這樣就會減小不少沒必要要的資源,UNION ALL能夠大大加快速度,若是你已經知道你的數據不會包括重複行,或者你不在意是否會出現重複的行,在這兩種狀況下使用UNION ALL更適合。此外,還能夠在應用程序邏輯中採用某些方法避免出現重複的行,這樣UNION ALL和UNION返回的結果都是同樣的,但UNION ALL不會進行排序。資源
五、避免使用NULL類型:NULL對於大多數數據庫都須要特殊處理,MySQL也不例外,它須要更多的代碼,更多的檢查和特殊的索引邏輯字符串
六、ORDER BY語句的MySQL優化:
a. ORDER BY + LIMIT組合的索引優化。若是一個SQL語句形如:效率
SELECT [column1],[column2],…. FROM [TABLE] ORDER BY [sort] LIMIT [offset],[LIMIT];搜索
這個SQL語句優化比較簡單,在[sort]這個欄位上創建索引便可。
b. WHERE + ORDER BY + LIMIT組合的索引優化,形如:
SELECT [column1],[column2],…. FROM [TABLE] WHERE [columnX] = [VALUE] ORDER BY [sort] LIMIT [offset],[LIMIT];
這個語句,若是你仍然採用第一個例子中創建索引的方法,雖然能夠用到索引,可是效率不高。更高效的方法是創建一個聯合索引(columnX,sort)
七、
儘可能早過濾
這一優化策略其實最多見於索引的優化設計中(將過濾性更好的字段放得更靠前)。
在 SQL 編寫中一樣可使用這一原則來優化一些 Join 的 SQL。好比咱們在多個表進行分頁數據查詢的時候,咱們最好是可以在一個表上先過濾好數據分好頁,而後再用分好頁的結果集與另外的表 Join,這樣能夠儘量多的減小沒必要要的 IO 操做,大大節省 IO 操做所消耗的時間。