Mysql優化是一個老生常談的問題,mysql
優化的方向也優化不少:從架構層;從設計層;從存儲層;從SQL語句層;程序員
今天講解一下從SQL語句層:sql
這個部分是程序員最容易把控的地方,也是最容易忽視的地方.數據庫
一個好的SQL語句可讓mysql的壓力下降很多,也可以看清楚一個程序員的能力水準.架構
能夠從平常的工做中積累.函數
對於怎麼查看explain執行計劃,比較索引就很少說了.優化
以下總結的一些優化建議:設計
a).可經過開啓慢查詢日誌來找出較慢的SQL日誌
b).不作列運算:SELECT id WHERE age + 1 = 10,任何對列的操做都將致使表掃描,它包括數據庫教程函數、計算表達式等等,查詢時要儘量將操做移至等號右邊教程
c).sql語句儘量簡單:一條sql只能在一個cpu運算;大語句拆小語句,減小鎖時間;一條大sql能夠堵死整個庫.
d).不用SELECT *
e).OR改寫成IN:OR的效率是n級別,IN的效率是log(n)級別,in的個數建議控制在200之內
f).不用函數和觸發器,在應用程序實現
g).避免%xxx式左側查詢
h).少用JOIN
i).使用同類型進行比較,好比用'123'和'123'比,123和123比
j).儘可能避免在WHERE子句中使用 != 或 <> 操做符,不然將引擎放棄使用索引而進行全表掃
k).對於連續數值,使用BETWEEN不用IN:SELECT id FROM t WHERE num BETWEEN 1 AND 5
l).列表數據不要拿全表,要使用LIMIT來分頁,每頁數量也不要太大;
後續會更新其他方面針對Mysql優化的建議.