MySQL數(shù)據(jù)庫(kù)中,在SELECT查詢語(yǔ)句前邊加上“EXPLAIN”或者“DESC”關(guān)鍵字,即可查看該查詢語(yǔ)句的執(zhí)行計(jì)劃,分析執(zhí)行計(jì)劃是優(yōu)化慢查詢的重要手段。如:
EXPLAIN SELECT * FROM school;
DESC SELECT * FROM school;
執(zhí)行結(jié)果:
接下來(lái)對(duì)這10個(gè)參數(shù)進(jìn)行簡(jiǎn)單解釋:
1、id:在整個(gè)查詢中SELECT的位置;
2、select_type:查詢的類型,包括沒(méi)有子查詢的簡(jiǎn)單查詢、UNION、子查詢、外部查詢、外部查詢中的子查詢或FROM語(yǔ)句中的子查詢等;
3、table:所查詢的表名;
4、type:連接如何執(zhí)行的情況。這里存在很多值,范圍從const(最佳)到ALL(最差);
5、possible_keys:為了提高查詢速度,在MySQL中可以使用的索引;
6、key:實(shí)際使用的索引;
7、key_len:索引的長(zhǎng)度;
8、ref:使用哪一列或常數(shù)與key一起從表中選擇行;
9、rows:MySQL需要在相應(yīng)表中為了成功進(jìn)行查詢,進(jìn)行檢驗(yàn)的行的數(shù)量。為了得出總行數(shù),MySQL必須掃描處理整個(gè)查詢,再乘以每個(gè)表的行值;
10、Extra:其他信息,涉及MySQL如何處理查詢,比如說(shuō),使用WHERE語(yǔ)句、使用一個(gè)索引、利用一個(gè)臨時(shí)表等;
其中select_type可以是:
SIMPLE
PRIMARY
UNION
DEPENDENT UNION
UNION RESULT
SUBQUERY
DEPENDENT SUBQUERY
DERIVED
type可以是:
system
const
eq_ref
ref
ref_or_null
index_merge
unique_subquery
index_subquery
range
index
ALL
Extra可以是:
Distinct
Not exists
range checked for each record (index map
Using filesort
Using index
Using temporary
Using where
Using sort_union(...), Using union(...), Using intersect(...)
Using index for group-by