之前是一直沒有聽過explain這個關鍵字的, 最近因為專案中總是會有慢查詢的一些操作, 所以請教了旁邊的同事幫忙排查下原因, 看到同事用explain來分析一些sql語句, 感覺好像發現了新大陸一樣。
於是自己也來學習下並總結自己學到的一些知識,如有問題歡迎拍磚。
首先來做個測試, 我這裡有一張表: t_jiakao_keyword, 資料量在60w左右。
然後使用explain進行各種查詢:
通過主鍵id去查詢,其中有幾個關鍵的指標需要關注:
首先看下 type 這列的結果,如果有型別是 all 時,表示預計會進行全表掃瞄(full table scan)。通常全表掃瞄的代價是比較大的,建議建立適當的索引,通過索引檢索避免全表掃瞄。此外,全索引掃瞄(full index scan)的代價有時候是比全表掃瞄還要高的,除非是基於innodb表的主鍵索引掃瞄。
再來看下 extra 列的結果,如果有出現 using temporary 或者 using filesort 則要多加關注:
using temporary,表示需要建立臨時表以滿足需求,通常是因為group by的列沒有索引,或者group by和order by的列不一樣,也需要建立臨時表,建議新增適當的索引。
using filesort,表示無法利用索引完成排序,也有可能是因為多表連線時,排序字段不是驅動表中的字段,因此也沒辦法利用索引完成排序,建議新增適當的索引。
using where,通常是因為全表掃瞄或全索引掃瞄時(type 列顯示為 all 或 index),又加上了where條件,建議新增適當的索引。
暫時想到上面幾個,如果有遺漏,以後再補充。
其他狀態例如:using index、using index condition、using index for group-by 則都還好,不用緊張。
最後放出所有欄位的一些說明及含義。sql查詢最重要的是合理使用索引, 關鍵點還是在索引!
mysql 效能分析 Mysql效能分析
優化mysql資料庫效能的十個引數 1 max connections 允許的同時客戶的數量。增加該值增加 mysqld 要求的檔案描述符的數量。這個數字應該增加,否則,你將經常看到 too many connections 錯誤。預設數值是100,我把它改為1024 2 record buffer...
mysql效能分析方法 mysql 效能分析方法
1.explain分析法 explain 分析查詢語句 1 id列數字越大越先執行,如果說數字一樣大,那麼就從上往下依次執行 2 select type查詢型別 primary dependent subquery等 3 table表名 4 type 從上到下效能依次下降 system 表中只有一行...
mysql 效能分析 mysql效能分析工具
一 expalin 在sql語句之前加上explain關鍵字就可以獲取這條sql語句執行的計畫 那麼返回的這些欄位是什麼呢?我們先關心一下比較重要的幾個字段 1.select type 查詢型別 1 簡單查詢,沒有union和子查詢 2 priamry 主查詢,有union或子查詢的最外層查詢 3 ...