詳解Mysql中explain執(zhí)行計(jì)劃信息中字段
Mysql中explain執(zhí)行計(jì)劃信息中字段詳解
1. 獲取執(zhí)行計(jì)劃
explain select * from t5; --或 desc select * from t5;

2. 字段含義
2.1 id
每個(gè)select子句的執(zhí)行順序,相同從上到下,不同由大到小執(zhí)行
2.2 select_type
select語(yǔ)句類(lèi)型
- SIMPLE 簡(jiǎn)單的select查詢,查詢中不包含子查詢或者UNION
- PRIMARY 查詢中若包含任何復(fù)雜的子部分,最外層查詢則被標(biāo)記為PRIMARY
- SUBQUERY 在SELECT或WHERE列表中包含了子查詢
- DERIVED 在FROM列表中包含的子查詢被標(biāo)記為DERIVED(衍生),MySQL會(huì)遞歸執(zhí)行這些子查詢,把結(jié)果放在臨時(shí)表中
- UNION 若第二個(gè)SELECT出現(xiàn)在UNION之后,則被標(biāo)記為UNION:若UNION包含在FROM子句的子查詢中,外層SELECT將被標(biāo)記為:DERIVED
- UNION RESULT 從UNION表獲取結(jié)果的SELECT
2.3 table
當(dāng)前執(zhí)行的表名
2.4 partitions
顯示當(dāng)前訪問(wèn)的分區(qū)
2.5 type
查詢使用了哪種類(lèi)型
#由好到差依次是 system > const > eq_ref > ref > range > index > all
- system 表只有一行記錄
- const 表示通過(guò)索引一次找到,const用于比較primary key 或者unique索引
- eq_ref 唯一性索引掃描,使用唯一性索引或主鍵查找時(shí)會(huì)發(fā)生
- ref 索引掃描,它返回所有匹配某個(gè)單個(gè)值的行。此類(lèi)索引訪問(wèn)只有當(dāng)使用非唯一性索引或唯一性索引非唯一性前綴時(shí)才會(huì)發(fā)生
- range 范圍掃描索,它返回所有匹配某個(gè)單個(gè)值的行。此類(lèi)索引訪問(wèn)只有當(dāng)使用非唯一性索引或唯一性索引非唯一性前綴時(shí)才會(huì)發(fā)生
- index 和全表掃描一樣。只是掃描表的時(shí)候按照索引次序進(jìn)行而不是行。主要優(yōu)點(diǎn)就是避免了排序, 但是開(kāi)銷(xiāo)仍然非常大。如在Extra列看到Using index,說(shuō)明正在使用覆蓋索引,只掃描索引的數(shù)據(jù),它比按索引次序全表掃描的開(kāi)銷(xiāo)要小很多
- all 全表掃描
2.6 possible_keys
顯示查詢使用了哪些索引,表示該索引可以進(jìn)行高效地查找
2.7 key
key列顯示MySQL實(shí)際決定使用的鍵(索引)。如果沒(méi)有選擇索引,鍵是NULL。要想強(qiáng)制MySQL使用或忽視possible_keys列中的索引,在查詢中使用FORCE INDEX、USE INDEX或者IGNORE INDEX
2.8 ley_len
key_len列顯示MySQL決定使用的鍵長(zhǎng)度。如果鍵是NULL,則長(zhǎng)度為NULL。使用的索引的長(zhǎng)度。在不損失精確性的情況下,長(zhǎng)度越短越好
2.9 ref
顯示使用哪個(gè)列或常數(shù)與key一起從表中選擇行
2.10 rows
rows列顯示MySQL認(rèn)為它執(zhí)行查詢時(shí)必須檢查的行數(shù)。注意這是一個(gè)預(yù)估值
2.11 extra
Extra是EXPLAIN輸出中另外一個(gè)很重要的列,該列顯示MySQL在查詢過(guò)程中的一些詳細(xì)信息,MySQL查詢優(yōu)化器執(zhí)行查詢的過(guò)程中對(duì)查詢計(jì)劃的重要補(bǔ)充信息。
| 類(lèi)型 | 說(shuō)明 |
|---|---|
| Using filesort | MySQL有兩種方式可以生成有序的結(jié)果,通過(guò)排序操作或者使用索引,當(dāng)Extra中出現(xiàn)了Using filesort 說(shuō)明MySQL使用了后者,但注意雖然叫filesort但并不是說(shuō)明就是用了文件來(lái)進(jìn)行排序,只要可能排序都是在內(nèi)存里完成的。大部分情況下利用索引排序更快,所以一般這時(shí)也要考慮優(yōu)化查詢了。使用文件完成排序操作,這是可能是ordery by,group by語(yǔ)句的結(jié)果,這可能是一個(gè)CPU密集型的過(guò)程,可以通過(guò)選擇合適的索引來(lái)改進(jìn)性能,用索引來(lái)為查詢結(jié)果排序。 |
| Using temporary | 用臨時(shí)表保存中間結(jié)果,常用于GROUP BY 和 ORDER BY操作中,一般看到它說(shuō)明查詢需要優(yōu)化了,就算避免不了臨時(shí)表的使用也要盡量避免硬盤(pán)臨時(shí)表的使用。 |
| Not exists | MYSQL優(yōu)化了LEFT JOIN,一旦它找到了匹配LEFT JOIN標(biāo)準(zhǔn)的行, 就不再搜索了。 |
| Using index | 說(shuō)明查詢是覆蓋了索引的,不需要讀取數(shù)據(jù)文件,從索引樹(shù)(索引文件)中即可獲得信息。如果同時(shí)出現(xiàn)using where,表明索引被用來(lái)執(zhí)行索引鍵值的查找,沒(méi)有using where,表明索引用來(lái)讀取數(shù)據(jù)而非執(zhí)行查找動(dòng)作。這是MySQL服務(wù)層完成的,但無(wú)需再回表查詢記錄。 |
| Using index condition | 這是MySQL 5.6出來(lái)的新特性,叫做“索引條件推送”。簡(jiǎn)單說(shuō)一點(diǎn)就是MySQL原來(lái)在索引上是不能執(zhí)行如like這樣的操作的,但是現(xiàn)在可以了,這樣減少了不必要的IO操作,但是只能用在二級(jí)索引上。 |
| Using where | 使用了WHERE從句來(lái)限制哪些行將與下一張表匹配或者是返回給用戶。注意:Extra列出現(xiàn)Using where表示MySQL服務(wù)器將存儲(chǔ)引擎返回服務(wù)層以后再應(yīng)用WHERE條件過(guò)濾。 |
| Using join buffer | 使用了連接緩存:Block Nested Loop,連接算法是塊嵌套循環(huán)連接;Batched Key Access,連接算法是批量索引連接 |
| impossible where | where子句的值總是false,不能用來(lái)獲取任何元組 |
| select tables optimized away | 在沒(méi)有GROUP BY子句的情況下,基于索引優(yōu)化MIN/MAX操作,或者對(duì)于MyISAM存儲(chǔ)引擎優(yōu)化COUNT(*)操作,不必等到執(zhí)行階段再進(jìn)行計(jì)算,查詢執(zhí)行計(jì)劃生成的階段即完成優(yōu)化。 |
| distinct | 優(yōu)化distinct操作,在找到第一匹配的元組后即停止找同樣值的動(dòng)作 |
到此這篇關(guān)于Mysql中explain執(zhí)行計(jì)劃信息中字段詳解的文章就介紹到這了,更多相關(guān)Mysql explain執(zhí)行計(jì)劃內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql 操作數(shù)據(jù)庫(kù)基礎(chǔ)詳解
這篇文章主要介紹了mysql 操作數(shù)據(jù)庫(kù)基礎(chǔ)詳解,MySQL是一種關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),關(guān)系數(shù)據(jù)庫(kù)將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個(gè)大倉(cāng)庫(kù)內(nèi),這樣就增加了速度并提高了靈活性2022-08-08
MySQL大表數(shù)據(jù)的分區(qū)與分庫(kù)分表的實(shí)現(xiàn)
數(shù)據(jù)庫(kù)的分區(qū)和分庫(kù)分表是兩種常用的技術(shù)方案,本文主要介紹了MySQL大表數(shù)據(jù)的分區(qū)與分庫(kù)分表的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-03-03
mysql5.6 解析JSON字符串方式(支持復(fù)雜的嵌套格式)
這篇文章主要介紹了mysql5.6 解析JSON字符串方式(支持復(fù)雜的嵌套格式),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
MySQL日期時(shí)間函數(shù)知識(shí)匯總
這篇文章主要介紹了MySQL日期時(shí)間函數(shù)知識(shí)匯總,這不同數(shù)據(jù)庫(kù)之間基本相同,只會(huì)有個(gè)別函數(shù)的差異。下文詳細(xì)介紹,需要的小伙伴可以參考一下2022-03-03
一文解決連接MySQL報(bào)錯(cuò)is?not?allowed?to?connect?to?this?MySQL?
這篇文章主要給大家介紹了關(guān)于如何通過(guò)一文解決連接MySQL報(bào)錯(cuò)is?not?allowed?to?connect?to?this?MySQL?server的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08
MySQL中利用索引對(duì)數(shù)據(jù)進(jìn)行排序的基礎(chǔ)教程
這篇文章主要介紹了MySQL中利用索引對(duì)數(shù)據(jù)進(jìn)行排序的基礎(chǔ)教程,需要的朋友可以參考下2015-11-11
講解Linux系統(tǒng)下如何自動(dòng)備份MySQL數(shù)據(jù)的基本教程
這篇文章主要介紹了Linux系統(tǒng)下如何自動(dòng)備份MySQL數(shù)據(jù)的基本教程,還給出了利用shell腳本全備份和增量備份的基本方法,需要的朋友可以參考下2015-11-11

