MySQL的explain如何使用

本文小編為大家詳細(xì)介紹“MySQL的explain如何使用”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“MySQL的explain如何使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。

專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)鎮(zhèn)海免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

MySQL的explain如何使用

一、explain能干什么

??通過(guò)explain語(yǔ)句,我們可以分析出以下結(jié)果

表的讀取順序數(shù)據(jù)讀取操作的操作類型
表之間的引用哪些索引可以使用
每張表有多少行被優(yōu)化器查詢哪些索引被實(shí)際使用

二、如何使用explain

??用法:explain + SQL 語(yǔ)句;

MariaDB [class_info]> explain select * from student;
+--+-----------+-------+----+-------------+-----+-------+-----+----+-----+
|id|select_type| table |type|possible_keys| key |key_len| ref |rows|Extra|
+--+-----------+-------+----+-------------+-----+-------+-----+----+-----+
| 1|   SIMPLE  |student| ALL|     NULL    | NULL| NULL  | NULL|  1 |     |
+--+-----------+-------+----+-------------+-----+-------+-----+----+-----+
1 row in set (0.00 sec)

??expain出來(lái)10個(gè)字段,分別是id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra

??概要描述:

字段描述
id選擇標(biāo)識(shí)符
select_type查詢的類型
table輸出結(jié)果集的表
type表的連接類型
possible_keys查詢時(shí)可能使用的索引
key實(shí)際使用的索引
key_len索引字段的長(zhǎng)度
ref列與索引的比較
rows掃描出的行數(shù)(估算的行數(shù))
Extra執(zhí)行情況的描述和說(shuō)明

三、explain各字段的含義

3.1 id

??id是select查詢的序列號(hào),包含一組數(shù)字,表示查詢中執(zhí)行select子句或操作表的順序。id的結(jié)果有以下三種情況:

??● id 相同,執(zhí)行順序由上至下,與sql中順序無(wú)關(guān)

MySQL的explain如何使用

??● 如果是子查詢,id的序號(hào)會(huì)遞增,id越大優(yōu)先級(jí)越高,越先被執(zhí)行

MySQL的explain如何使用

??● id 如果相同,可以認(rèn)為是一組,從上往下順序執(zhí)行;在所有組中id值越大,優(yōu)先級(jí)越高,越先執(zhí)行。

MySQL的explain如何使用


3.2 select_type

??select_type顯示示查詢中每個(gè)select子句的類型,常用的select_type的類型有simple、primary、subquery、derived、union、union result

??(1) simple(簡(jiǎn)單select,不使用union或子查詢等任何復(fù)雜查詢)

MySQL的explain如何使用

??(2) primary(子查詢中最外層查詢,查詢中若包含任何復(fù)雜的子部分,最外層的select被標(biāo)記為primary)

MySQL的explain如何使用

??(3) subquery(在select或where列表中包含了子查詢)

??(4) derived(在from列表中包含的子查詢被標(biāo)記為derived(衍生),MySQL會(huì)遞歸執(zhí)行這些子查詢,把結(jié)果放在臨時(shí)表中)

??(5) union(union中的第二個(gè)或后面的select語(yǔ)句)

MySQL的explain如何使用

??(6) union result(union的結(jié)果,union語(yǔ)句中第二個(gè)select開(kāi)始后面所有select)

MySQL的explain如何使用


3.3 table

??table顯示這一步所訪問(wèn)數(shù)據(jù)庫(kù)中表名稱 (顯示這一行的數(shù)據(jù)是關(guān)于哪張表的)。


3.4 type

??type所顯示的是查詢使用了哪種類型,type包含的類型有all、index、range、ref、eq_ref、const、system、NULL,它的性能依次遞增。

??● all:Full Table Scan, MySQL將遍歷全表以找到匹配的行

MySQL的explain如何使用

??● index: Full Index Scan,index與ALL區(qū)別為index類型只遍歷索引樹(shù)

MySQL的explain如何使用

??● range:只檢索給定范圍的行,使用一個(gè)索引來(lái)選擇行

MySQL的explain如何使用

??● ref: 表示上述表的連接匹配條件,即哪些列或常量被用于查找索引列上的值

MySQL的explain如何使用

??● eq_ref: 類似ref,區(qū)別就在使用的索引是唯一索引,對(duì)于每個(gè)索引鍵值,表中只有一條記錄匹配,簡(jiǎn)單來(lái)說(shuō),就是多表連接中使用primary key或者 unique key作為關(guān)聯(lián)條件

??● const、system: 當(dāng)MySQL對(duì)查詢某部分進(jìn)行優(yōu)化,并轉(zhuǎn)換為一個(gè)常量時(shí),使用這些類型訪問(wèn)。如將主鍵置于where列表中,MySQL就能將該查詢轉(zhuǎn)換為一個(gè)常量,system是const類型的特例,當(dāng)查詢的表只有一行的情況下使用system。

MySQL的explain如何使用

??● NULL: MySQL在優(yōu)化過(guò)程中分解語(yǔ)句,執(zhí)行時(shí)甚至不用訪問(wèn)表或索引,例如從一個(gè)索引列里選取最小值可以通過(guò)單獨(dú)索引查找完成。


3.5 possible_keys

??possible_keys顯示可能應(yīng)用在這張表中的索引,一個(gè)或多個(gè)。查詢涉及到的字段上若存在索引,則該索引將被列出,但不一定被查詢實(shí)際使用。(該查詢可以利用的索引,如果沒(méi)有任何索引顯示 null)


3.6 key

??key顯示MySQL實(shí)際決定使用的鍵(索引),必然包含在possible_keys中。如果沒(méi)有選擇索引,則是NULL。要想強(qiáng)制MySQL使用或忽視possible_keys列中的索引,在查詢中使用force index、use index 或者 ignore index


3.7 key_len

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

MySQL的explain如何使用


3.8 ref

??ref顯示索引的那一列被使用,表示上述表的連接匹配條件,即哪些列或常量被用于查找索引列上的值

MySQL的explain如何使用


3.9 rows

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

MySQL的explain如何使用


3.10 Extra

??Extra該列包含MySQL解決查詢的詳細(xì)信息,有以下幾種情況:

??的請(qǐng)求列都是同一個(gè)索引的部分的時(shí)候,表示mysql服務(wù)器將在存儲(chǔ)引擎檢索行后再進(jìn)行過(guò)濾

??● Using temporary表示MySQL需要使用臨時(shí)表來(lái)存儲(chǔ)結(jié)果集,常見(jiàn)于排序和分組查詢,常見(jiàn) group by ; order by

??● Using filesort當(dāng)Query中包含 order by 操作,而且無(wú)法利用索引完成的排序操作稱為“文件排序”

??● Using join buffer改值強(qiáng)調(diào)了在獲取連接條件時(shí)沒(méi)有使用索引,并且需要連接緩沖區(qū)來(lái)存儲(chǔ)中間結(jié)果。如果出現(xiàn)了這個(gè)值,那應(yīng)該注意,根據(jù)查詢的具體情況可能需要添加索引來(lái)改進(jìn)能。

??● Impossible where這個(gè)值強(qiáng)調(diào)了where語(yǔ)句會(huì)導(dǎo)致沒(méi)有符合條件的行(通過(guò)收集統(tǒng)計(jì)信息不可能存在結(jié)果)。

??● Select tables optimized away這個(gè)值意味著僅通過(guò)使用索引,優(yōu)化器可能僅從聚合函數(shù)結(jié)果中返回一行

??● No tables used Query語(yǔ)句中使用from dual 或不含任何from子句

讀到這里,這篇“MySQL的explain如何使用”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)頁(yè)題目:MySQL的explain如何使用
當(dāng)前鏈接:http://muchs.cn/article46/pgdheg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、微信公眾號(hào)、網(wǎng)站排名、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站制作電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)