mysql explain使用介紹

explain命令用來查看一個(gè)SQL語句的執(zhí)行計(jì)劃,了解我們所寫的sql有沒有執(zhí)行索引粤剧,是不是進(jìn)行了全表掃描。

一.explain使用方式

在sql語句前加上explain,explain只能解釋select操作养篓,其他操作要重寫為select后查看執(zhí)行計(jì)劃。
eg:
表:

user_info

user_code

索引:

執(zhí)行計(jì)劃
explain select * from user_info where name = '測(cè)試';
執(zhí)行結(jié)果:
上條sql執(zhí)行結(jié)果

二.各項(xiàng)結(jié)果介紹:

1.id:sql片段執(zhí)行的順序

  • id相同 :執(zhí)行順序由上到下
  • id不相同 :如果是子查詢赂蕴,id的序號(hào)會(huì)遞增柳弄。id值越大,優(yōu)先級(jí)越高概说,越先被執(zhí)行碧注。
  • 在所有組中,id值越大糖赔,優(yōu)先級(jí)越高萍丐,越先執(zhí)行

2.select_type:查詢類型

  • SIMPLE :簡(jiǎn)單SELECT(不使用UNION或子查詢等)。
  • PRIMARY:查詢中若包含任何復(fù)雜的子部分放典,最外層查詢則被標(biāo)記為primary 逝变。
  • UNION:union語句中的第二個(gè)或后面的SELECT語句;若 union 包含在from子句的子查詢中奋构,外層 select 將被標(biāo)記為 derived骨田。例:
  • UNION RESULT: UNION的結(jié)果,union語句中第二個(gè)select開始后面所有select声怔。
  • DEPENDENT UNION:union中的第二個(gè)或后面的SELECT語句态贤,取決于外面的查詢
  • SUBQUERY:子查詢中的第一個(gè)SELECT,結(jié)果不依賴于外部查詢醋火。
  • DEPENDENT SUBQUERY:子查詢中的第一個(gè)SELECT悠汽,依賴于外部查詢。
  • DERIVED:派生表的SELECT, FROM子句的子查詢芥驳。在 from 列表 中包含的子查詢被標(biāo)記為 derived(衍生)柿冲,MySQL會(huì)遞歸執(zhí)行這些子查詢,把結(jié)果放在臨時(shí)表中兆旬。
  • UNCACHEABLE SUBQUERY:一個(gè)子查詢的結(jié)果不能被緩存假抄,必須重新評(píng)估外鏈接的第一行

3.table:sql片段所對(duì)應(yīng)的表

4.type:索引類型

常用的類型有: all、index、range宿饱、 ref熏瞄、eq_ref、const谬以、system强饮、null(從左到右,性能從差到好)

  • all:最壞的情況, 從頭到尾全表掃描
  • index:全索引掃描为黎,index與all區(qū)別為index類型只遍歷索引樹(index 是從索引中讀取的邮丰,而 all 是從硬盤)。掃描表的時(shí)候按照索引次序進(jìn)行而不是行铭乾,主要優(yōu)點(diǎn)就是避免了排序, 但是開銷仍然非常大剪廉。
  • range:使用索引范圍查詢。這個(gè)類型通常出現(xiàn)在 =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, IN() 操作中炕檩。它開始于索引的某一點(diǎn)妈经,而結(jié)束于索引的另一點(diǎn),不用掃描全部索引捧书,所以優(yōu)于index
  • ref:除唯一或非主鍵索引外骤星,使用普通索引经瓷,返回符合條件的所有行。 叫做ref是因?yàn)樗饕硞€(gè)參考值相比較. 這個(gè)參考值或者是一個(gè)數(shù), 或者是來自一個(gè)表里的多表查詢的結(jié)果值洞难。 例:'SELECT * FROM tbl WHERE idx_col=expr;'
  • eq_ref:跟ref類似舆吮,區(qū)別是eq_ref常用于主鍵或唯一索引掃描,每個(gè)索引鍵值队贱,表中只有一條記錄匹配色冀。讀取本表中和關(guān)聯(lián)表表中的每行組合成的一行。除 了 system 和 const 類型之外, 這是最好的連接類型柱嫌。例:'SELECT * FROM reftable,tbl WHERE reftable.key_column=tbl.column;'
  • const:用于針對(duì)主鍵或唯一索引的等值查詢掃描锋恬,最多只返回一行數(shù)據(jù),所以很快编丘。consteq_ref的區(qū)別:const是直接按主鍵或唯一鍵讀取与学,eq_ref用于聯(lián)表查詢的情況,按聯(lián)表的主鍵或唯一鍵聯(lián)合查詢嘉抓。
  • system:system是const類型的特例索守,當(dāng)表中只有一行的情況下,使用system抑片。
  • null:MySQL在優(yōu)化過程中分解語句卵佛,執(zhí)行時(shí)甚至不用訪問表或索引,例如從一個(gè)索引列里選取最小值可以通過單獨(dú)索引查找完成。

5.possible_keys:可能使用的索引截汪。

顯示可能應(yīng)用在這張表中的索引疾牲,一個(gè)或多個(gè)。查詢涉及到的字段上若存在索引挫鸽,則該索引將被列出说敏,但不一定被查詢實(shí)際使用。

6.key:表示實(shí)際使用的索引丢郊。

若為null盔沫,則表示沒有使用到索引。原因:a.字段沒建對(duì)應(yīng)的索引枫匾;b.索引已建架诞,但是查詢條件導(dǎo)致索引失效(如orlike干茉、!=谴忧、<)。

7.key_len:索引字段的可能最大長(zhǎng)度

表示索引中使用的字節(jié)數(shù)角虫,可通過該列計(jì)算查詢中使用的索引的長(zhǎng)度(key_len顯示的值為索引字段的最大可能長(zhǎng)度沾谓,并非實(shí)際使用長(zhǎng)度,即key_len是根據(jù)表定義計(jì)算而得戳鹅,不是通過表內(nèi)檢索出的)均驶。
不損失精確性的情況下,長(zhǎng)度越短越好 枫虏。
key_len 的計(jì)算規(guī)則:

  • 字符串
    char(n):n 字節(jié)長(zhǎng)度
    varchar(n):如果是 utf8 編碼, 則是( 3 n + 2)個(gè)字節(jié)妇穴;如果是 utf8mb4 編碼, 則是 (4 n + 2)個(gè)字節(jié)。
  • 數(shù)值類型
    tinyint:1字節(jié)
    smallint: 2字節(jié)
    mediumint: 3字節(jié)
    int:4字節(jié)
    bigint: 8字節(jié)
  • 時(shí)間類型
    date:3字節(jié)
    timestamp: 4字節(jié)
    datetime: 8字節(jié)
  • 字段屬性: null 屬性 占用1個(gè)字節(jié)隶债。如果一個(gè)字段是 not null 的腾它, 則沒有此屬性。

8.ref:使用索引的列名

顯示了在 key列記錄的索引中死讹,表查找值所用到的列或常量瞒滴,常見的有:const(常量),func赞警,N

9.rows:掃描出的行數(shù)(估算的行數(shù))

估算出結(jié)果集行數(shù)逛腿,表示MySQL根據(jù)表統(tǒng)計(jì)信息及索引選用情況,估算的找到所需的記錄所需要讀取的行數(shù)

10.Extra:額外信息

執(zhí)行情況的描述和說明仅颇。

  • Using index:只需通過索引就可以從表中獲取列的信息单默,無需額外去讀取真實(shí)的行數(shù)據(jù)。如果查詢使用的列值僅僅是一個(gè)簡(jiǎn)單索引的部分值忘瓦,則會(huì)使用這種策略來優(yōu)化查詢搁廓。
  • Using index condition:在mysql 5.6版本后加入的新特性(Index Condition Pushdown)引颈。Using index condition 會(huì)先條件過濾索引,過濾完索引后找到所有符合索引條件的數(shù)據(jù)行境蜕,隨后用 WHERE 子句中的其他條件去過濾這些數(shù)據(jù)行
  • Using where:不用讀取表中所有信息蝙场,僅通過索引就可以獲取所需數(shù)據(jù),這發(fā)生在對(duì)表的全部的請(qǐng)求列都是同一個(gè)索引的部分的時(shí)候粱年,表示mysql服務(wù)器將在存儲(chǔ)引擎檢索行后再進(jìn)行過濾售滤。
  • Using temporary:表示MySQL需要使用臨時(shí)表來存儲(chǔ)結(jié)果集,常見于排序和分組查詢台诗,常見 group by ; order by
  • Using filesort:當(dāng)Query中包含 order by 操作完箩,而且無法利用索引完成的排序操作稱為“文件排序”
  • Using join buffer:改值強(qiáng)調(diào)了在獲取連接條件時(shí)沒有使用索引,并且需要連接緩沖區(qū)來存儲(chǔ)中間結(jié)果拉队。如果出現(xiàn)了這個(gè)值弊知,那應(yīng)該注意,根據(jù)查詢的具體情況可能需要添加索引來改進(jìn)能粱快。
  • Impossible where:這個(gè)值強(qiáng)調(diào)了where語句會(huì)導(dǎo)致沒有符合條件的行(通過收集統(tǒng)計(jì)信息不可能存在結(jié)果)秩彤。
  • Select tables optimized away:這個(gè)值意味著僅通過使用索引,優(yōu)化器可能僅從聚合函數(shù)結(jié)果中返回一行
  • No tables used:Query語句中使用from dual 或不含任何from子句
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末事哭,一起剝皮案震驚了整個(gè)濱河市漫雷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鳍咱,老刑警劉巖降盹,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異流炕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)仅胞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門每辟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人干旧,你說我怎么就攤上這事渠欺。” “怎么了椎眯?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵挠将,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我编整,道長(zhǎng)舔稀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任掌测,我火速辦了婚禮内贮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己夜郁,他們只是感情好什燕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著竞端,像睡著了一般屎即。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上事富,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天技俐,我揣著相機(jī)與錄音,去河邊找鬼赵颅。 笑死虽另,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的饺谬。 我是一名探鬼主播捂刺,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼募寨!你這毒婦竟也來了族展?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤拔鹰,失蹤者是張志新(化名)和其女友劉穎仪缸,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體列肢,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡恰画,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瓷马。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拴还。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖欧聘,靈堂內(nèi)的尸體忽然破棺而出片林,到底是詐尸還是另有隱情,我是刑警寧澤怀骤,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布费封,位于F島的核電站,受9級(jí)特大地震影響蒋伦,放射性物質(zhì)發(fā)生泄漏弓摘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一痕届、第九天 我趴在偏房一處隱蔽的房頂上張望衣盾。 院中可真熱鬧寺旺,春花似錦、人聲如沸势决。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽果复。三九已至陈莽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間虽抄,已是汗流浹背走搁。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留迈窟,地道東北人私植。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像车酣,于是被迫代替她去往敵國和親曲稼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

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