MySQL EXPLAIN 輸出信息解讀

一條查詢語句執(zhí)行過程

sql執(zhí)行過程

EXPLAIN 基本語法

explain [extended|partition]select

explain

字段說明

字段 說明
id 執(zhí)行編號像寒,標(biāo)識 select 所屬的行橄仍。如果在語句中沒子查詢或關(guān)聯(lián)查詢耀态,只有唯一的 select谊惭,每行都將顯示 1空骚。否則叠国,內(nèi)層的 select 語句一般會順序編號衩匣,對應(yīng)于其在原始語句中的位置
select_type 顯示本行是簡單或復(fù)雜select蕾总。如果查詢有任何復(fù)雜的子查詢,則最外層標(biāo)記為PRIMARY(DERIVED琅捏、UNION生百、UNION RESUlT)
table 訪問查詢的表名或表別名
partitions 查詢訪問的分區(qū)
type 表的訪問類型( MySQL 如何查詢表中的行記錄)效率高低:const / eq_ref / ref / range / index / all
possible_keys 可能使用的索引
key 實際使用的索引
key_len 實際使用的索引長度(單位:字節(jié))
ref 用于索引查找的值的來源,如果值未常量柄延,則 refconst
rows 預(yù)計查詢需要掃描的行數(shù)(在表或索引樹中)
filtered 查詢條件所過濾的行記錄數(shù)占比
Extra 額外的信息

id

id 為數(shù)值蚀浆,表示在查詢過程中,SELECT 語句的執(zhí)行順序

  • 如果 id 值相同搜吧,則執(zhí)行順序為:從上到下
  • 如果 id 值不同市俊,則執(zhí)行順序為: id 值越大的越先執(zhí)行
  • 如果 id 值相同,則可以認為他們是同一分組滤奈,同一分組中執(zhí)行順序為:從上到下摆昧,在所有組中, id 值越大的越先執(zhí)行
  • 如果 id 值為 null 蜒程,則表示這是一個結(jié)果集

select_type

表示查詢的類型

類型 說明
SIMPLE 簡單查詢(無 NUION绅你、SUBQUERY 的 SELECT 語句)
PRIMARY 在復(fù)雜查詢中伺帘,最外層的 SELECT 語句
UNION 在聯(lián)合查詢中,第二個和隨后的 SELECT 語句
DEPENDENT UNION 在聯(lián)合查詢中忌锯,第二個和隨后的 SELECT 語句伪嫁,并且該 SELECT 語句依賴外層 SELECT 語句
UNION RESULT 聯(lián)合查詢的結(jié)果表
SUBQUERY 不在 FROM 子句中的子查詢
DEPENDENT SUBQUERY 相關(guān)子查詢
DERIVED 派生表(在FROM從句中的子查詢)
MATERIALIZED 物化表(非關(guān)聯(lián)子查詢的一種優(yōu)化類型)
UNCACHEABLE SUBQUERY 無法緩存的子查詢
UNCACHEABLE NUION 無法緩存的聯(lián)合查詢

table

查詢訪問的表名或別名

關(guān)聯(lián)優(yōu)化器會為查詢選擇關(guān)聯(lián)順序,左側(cè)深度優(yōu)先
當(dāng) from 中有子查詢的時候偶垮,表名是 derivedN 的形式张咳,N 指向子查詢,也就是 explain 結(jié)果中的下一列
當(dāng)有 union result 的時候针史,表名是 union 1,2 等的形式晶伦,1,2 表示參與 unionquery id
注意:MySQL 對待這些表和普通表一樣,但是這些“臨時表”是沒有任何索引的

partitions

partitions

type

類型 說明
NULL 不需要訪問表
system 表中只有一行記錄或空表啄枕,只能用 myisammemory
const 當(dāng) MySQL 對查詢進行優(yōu)化將其轉(zhuǎn)換成常量時婚陪,就會使用這個值
eq_ref 出現(xiàn)在多表連接查詢中,驅(qū)動表只有一行記錄频祝,同時連接字段都是非空唯一索引
ref 非唯一索引查找(或唯一索引的前綴查找)
fulltext 全文索引查找
ref_or_null ref 類型一致泌参,只是增加了 NULL 的對比,
unique_subquery 代替 eq_ref 針對 IN 子查詢的優(yōu)化常空, IN 子句返回唯一索引
index_subquery unique_subquery 相似沽一,但 IN 子句返回非唯一索引
range 索引范圍掃描,使用 BETWEEN漓糙、IN铣缠、>、>=等運算符對索引字段值進行比較
index_merge 使用多個索引匹配查找昆禽,最終獲取合并結(jié)果(交集 AND 蝗蛙、并集 OR )
index 全索引掃描
ALL 全表掃描

possible_keys

顯示查詢使用了哪些索引,表示該索引可以進行高效地查找醉鳖,但是列出來的索引對于后續(xù)優(yōu)化過程可能是沒有用的

key

key列顯示MySQL實際決定使用的鍵(索引)捡硅。如果沒有選擇索引,鍵是NULL盗棵。要想強制MySQL使用或忽視possible_keys列中的索引壮韭,在查詢中使用FORCE INDEX、USE INDEX或者IGNORE INDEX纹因。

key_len

key_len列顯示MySQL決定使用的鍵長度喷屋。如果鍵是NULL,則長度為NULL瞭恰。使用的索引的長度逼蒙。在不損失精確性的情況下,長度越短越好 。

ref

ref列顯示使用哪個列或常數(shù)與key一起從表中選擇行是牢。

rows

rows列顯示MySQL認為它執(zhí)行查詢時必須檢查的行數(shù)僵井。注意這是一個預(yù)估值。

filtered

存儲引擎層返回給 MySQL 后驳棱,MySQL server 層過濾后批什,剩下滿足條件的行數(shù)比例

Extra

Extra是EXPLAIN輸出中另外一個很重要的列,該列顯示MySQL在查詢過程中的一些詳細信息社搅,MySQL查詢優(yōu)化器執(zhí)行查詢的過程中對查詢計劃的重要補充信息驻债。

類型 說明
Using filesort 說明 MySQL 無法利用索引排序,進行了額外的排序
Using temporary 使用的臨時表
Using index 使用索引覆蓋形葬,不需要掃描原表合呐,直接通過索引掃描就能得到想要的數(shù)據(jù)
Using index condition 使用索引條件過濾
Using where 通過 WHERE 從句的條件來篩選存儲引擎返回的行記錄
Using join buffer 使用了連接緩存:Block Nested Loop,連接算法是塊嵌套循環(huán)連接;Batched Key Access笙以,連接算法是批量索引連接
impossible where where子句的值總是false淌实,不能用來獲取任何元組
select tables optimized away 在沒有GROUP BY子句的情況下,基于索引優(yōu)化MIN/MAX操作猖腕,或者對于MyISAM存儲引擎優(yōu)化COUNT(*)操作拆祈,不必等到執(zhí)行階段再進行計算,查詢執(zhí)行計劃生成的階段即完成優(yōu)化倘感。
distinct 優(yōu)化distinct操作淤年,在找到第一匹配的元組后即停止找同樣值的動作
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蜡豹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌桨吊,老刑警劉巖视乐,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異伸刃,居然都是意外死亡捧颅,警方通過查閱死者的電腦和手機挚币,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笛粘,“玉大人闰蛔,你說我怎么就攤上這事序六±鳎” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵扔罪,是天一觀的道長。 經(jīng)常有香客問我全肮,道長辜腺,這世上最難降的妖魔是什么测砂? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任胧华,我火速辦了婚禮有巧,結(jié)果婚禮上篮迎,老公的妹妹穿的比我還像新娘。我一直安慰自己岂傲,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般主籍。 火紅的嫁衣襯著肌膚如雪沈条。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機與錄音屋厘,去河邊找鬼汗洒。 笑死议纯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播虐先,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了雏掠?” 一聲冷哼從身側(cè)響起斩祭,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绑青,沒想到半個月后诬像,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡闸婴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年坏挠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片邪乍。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡降狠,死狀恐怖对竣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情榜配,我是刑警寧澤否纬,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站蛋褥,受9級特大地震影響临燃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜烙心,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一膜廊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧弃理,春花似錦溃论、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至辆苔,卻和暖如春算灸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背驻啤。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工菲驴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人骑冗。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓赊瞬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親贼涩。 傳聞我的和親對象是個殘疾皇子巧涧,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容