本文小編為大家詳細(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)變。
??通過(guò)explain語(yǔ)句,我們可以分析出以下結(jié)果
表的讀取順序 | 數(shù)據(jù)讀取操作的操作類型 |
---|---|
表之間的引用 | 哪些索引可以使用 |
每張表有多少行被優(yōu)化器查詢 | 哪些索引被實(shí)際使用 |
??用法: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ō)明 |
??id
是select查詢的序列號(hào),包含一組數(shù)字,表示查詢中執(zhí)行select子句或操作表的順序。id的結(jié)果有以下三種情況:
??● id 相同,執(zhí)行順序由上至下,與sql中順序無(wú)關(guān)
??● 如果是子查詢,id的序號(hào)會(huì)遞增,id越大優(yōu)先級(jí)越高,越先被執(zhí)行
??● id 如果相同,可以認(rèn)為是一組,從上往下順序執(zhí)行;在所有組中id值越大,優(yōu)先級(jí)越高,越先執(zhí)行。
??select_type
顯示示查詢中每個(gè)select子句的類型,常用的select_type的類型有simple、primary、subquery、derived、union、union result
??(1) simple(簡(jiǎn)單select,不使用union或子查詢等任何復(fù)雜查詢)
??(2) primary(子查詢中最外層查詢,查詢中若包含任何復(fù)雜的子部分,最外層的select被標(biāo)記為primary)
??(3) subquery(在select或where列表中包含了子查詢)
??(4) derived(在from列表中包含的子查詢被標(biāo)記為derived(衍生),MySQL會(huì)遞歸執(zhí)行這些子查詢,把結(jié)果放在臨時(shí)表中)
??(5) union(union中的第二個(gè)或后面的select語(yǔ)句)
??(6) union result(union的結(jié)果,union語(yǔ)句中第二個(gè)select開(kāi)始后面所有select)
??table
顯示這一步所訪問(wèn)數(shù)據(jù)庫(kù)中表名稱 (顯示這一行的數(shù)據(jù)是關(guān)于哪張表的)。
??type
所顯示的是查詢使用了哪種類型,type包含的類型有all、index、range、ref、eq_ref、const、system、NULL,它的性能依次遞增。
??● all:Full Table Scan, MySQL將遍歷全表以找到匹配的行
??● index: Full Index Scan,index與ALL區(qū)別為index類型只遍歷索引樹(shù)
??● range:只檢索給定范圍的行,使用一個(gè)索引來(lái)選擇行
??● ref: 表示上述表的連接匹配條件,即哪些列或常量被用于查找索引列上的值
??● 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。
??● NULL: MySQL在優(yōu)化過(guò)程中分解語(yǔ)句,執(zhí)行時(shí)甚至不用訪問(wèn)表或索引,例如從一個(gè)索引列里選取最小值可以通過(guò)單獨(dú)索引查找完成。
??possible_keys
顯示可能應(yīng)用在這張表中的索引,一個(gè)或多個(gè)。查詢涉及到的字段上若存在索引,則該索引將被列出,但不一定被查詢實(shí)際使用。(該查詢可以利用的索引,如果沒(méi)有任何索引顯示 null)
??key
顯示MySQL實(shí)際決定使用的鍵(索引),必然包含在possible_keys中。如果沒(méi)有選擇索引,則是NULL。要想強(qiáng)制MySQL使用或忽視possible_keys列中的索引,在查詢中使用force index
、use index
或者 ignore index
。
??key_len
表示索引中使用的字節(jié)數(shù),可通過(guò)該列計(jì)算查詢中使用的索引的長(zhǎng)度(key_len顯示的值為索引字段的最大可能長(zhǎng)度,并非實(shí)際使用長(zhǎng)度,即key_len是根據(jù)表定義計(jì)算而得,不是通過(guò)表內(nèi)檢索出的),在不損失精確性的情況下,長(zhǎng)度越短越好
。
??ref
顯示索引的那一列被使用,表示上述表的連接匹配條件,即哪些列或常量被用于查找索引列上的值
??rows
估算出結(jié)果集的行數(shù),表示MySQL根據(jù)表統(tǒng)計(jì)信息及索引選用情況,估算的找到所需的記錄所需要讀取的行數(shù)。
??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)