一文讀懂MySQL執(zhí)行計劃
在日常開發(fā)中,我們經(jīng)常會碰到一些復雜的多表聯(lián)查的SQL,進行性能優(yōu)化的問題。這時候了解SQL的執(zhí)行過程就尤為重要。通過在SQL語句前面添加Explain關鍵字,MySQL就會為我們揭示執(zhí)行的流程。

id值相同:按照從上往下的順序執(zhí)行

id值不同:id值越大,越優(yōu)先執(zhí)行

id值兩種情況混合:最先優(yōu)先執(zhí)行id值大的,id值相同的按照從上往下順序執(zhí)行

select_type列解析

type
SQL查詢性能的一個重要指標,查詢性能由好到壞如下:

system:表里只有一條記錄
const:索引只匹配一次就找到數(shù)據(jù),該場景常見與主鍵與唯一索引
eq_ref?:主鍵或者唯一索引的掃描
ref?:普通索引的掃描
range?:范圍搜索,使用了between、in、<>這些關鍵字后
index: 比起全表掃描稍微好一點,沒有掃描所有數(shù)據(jù)
ALL:全表掃描所有的數(shù)據(jù)
雖然還有很多其他的Type,但是常見的就上面幾種,最低要求要達到range,最好達到ref
possible_keys && key
possible_keys:可能會用到的索引
key:實際用到的索引

key_len
索引字段可能的長度,數(shù)字越小約好
ref
1.索引查找用的表里的哪個字段,
2.使用常量等值查詢(1=1)顯示const
3.使用了表達式、函數(shù)情況下顯示func
Rows
找到需要的數(shù)據(jù),需要掃描數(shù)據(jù)表的行數(shù),越小約好
filtered
數(shù)據(jù)表里,符合查詢條件的數(shù)據(jù),所占用的百分比
Extra
