1. 程式人生 > 其它 >mysql慢sql優化總結

mysql慢sql優化總結

explain之後(個人見解 僅供參考 歡迎批評指正)

1. 確認當前sql中的索引使用 是否正常 如果不正常 嘗試給適當的欄位增加索引(但是建立索引的時候 我們需要考慮索引的效能 一般建議一張表 索引欄位的佔比 控制在30%以下 如果索引過多 會導致我們更新、刪除的操作變慢)

2. 查詢的欄位 應該遵循 要什麼查什麼 不用的欄位 儘量不要查出來

3. 結合業務 把當前sql中的left join替換為join (原因:join要求兩張表都要有資料 left join只要左表有資料即可 使用join會使關聯的資料變少 直接提高查詢效率)
4. 確認一下當前sql中是否有子查詢 如果有子查詢 嘗試把子查詢併入到sql中 如果不能併入 則嘗試把sql分開查詢

5. 在實際業務中 我們往往會遇到查詢出的資料有大欄位的可能,而且業務往往也會對滿足初級條件的資料 做二次篩選 建議在初次查詢的時候 只把小欄位給查出來 然後對滿足二次篩選條件 且確定需要返回的大欄位 根據主鍵id再查一次 防止因為返回資料過多 導致慢sql出現的現象

6. 我們在寫sql的時候 順序往往是 select * from test where id > 1 group by age have score > 18 order by id desc limit 10

此sql在mysql中的實際執行順序是 from > join > where > group by > having > select > (查出資料到記憶體中 這也解釋了為什麼在使用group by之後 order by 為什麼會失效的原因) > order by > limit 從上面的執行順序中 我們可以得出 在我們關聯表的時候 儘量把on條件帶上 否則sql在執行的過程中 會全表關聯 然後才經過where的篩選 雖然我們在返回結果中 看不到二者的區別 但是在實際執行的過程中 會隱形的提高sql查詢的笛卡爾積