欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MYSQL?EXPLAIN結(jié)果解讀

 更新時(shí)間:2024年10月24日 09:45:12   作者:數(shù)據(jù)庫農(nóng)民工  
本文主要介紹了MySQL查詢中的一些關(guān)鍵字,如:SIMPLE,PRIMARY,UNION,DEPENDENTUNION,UNIONRESULT,SUBQUERY,DEPENDENTSUBQUERY,DERIVED,UNCACHEABLESUBQUERY等,文章詳細(xì)解析了這些關(guān)鍵字的含義和用途

MYSQL EXPLAIN結(jié)果解讀

  • EXPLAIN不會告訴你關(guān)于觸發(fā)器、存儲過程的信息或用戶自定義函數(shù)對查詢的影響情況。
  • EXPLAIN不考慮各種Cache(緩存)。
  • EXPLAIN不能顯示MySQL在執(zhí)行查詢時(shí)所作的優(yōu)化工作。部分統(tǒng)計(jì)信息是估算的,并非精確值。    
  • EXPALIN只能解釋SELECT操作,其他操作要重寫為SELECT后查看執(zhí)行計(jì)劃。

1 id

select的識別符,這是select的查詢序列號。

  • 如果有兩列數(shù)據(jù)id相同,則為同一組查詢,由上到下執(zhí)行。
  • 如果id值不同,id值越大,優(yōu)先級越高。

2 select_type

select的類型

  • SIMPLE(simple):簡單SELECT(不使用UNION或子查詢)。 
  • PRIMARY(primary):子查詢中最外層查詢,查詢中若包含任何復(fù)雜的子部分,最外層的select被標(biāo)記為PRIMARY。 
  • UNION(union):UNION中的第二個或后面的SELECT語句。 
  • DEPENDENT UNION(dependent union):UNION中的第二個或后面的SELECT語句,取決于外面的查詢。 
  • UNION RESULT(union result):UNION的結(jié)果,union語句中第二個select開始后面所有select。 
  • SUBQUERY(subquery):子查詢中的第一個SELECT,結(jié)果不依賴于外部查詢。 
  • DEPENDENT SUBQUERY(dependent subquery):子查詢中的第一個SELECT,依賴于外部查詢。 
  • DERIVED(derived):派生表的SELECT (FROM子句的子查詢)。 
  • UNCACHEABLE SUBQUERY(uncacheable subquery):(一個子查詢的結(jié)果不能被緩存,必須重新評估外鏈接的第一行)

3 table

  • 輸出結(jié)果集的表名稱。

4 partitions

  • 輸出結(jié)果集的表所在的分區(qū)

5 TYPE

  • type顯示的是訪問類型,是較為重要的一個指標(biāo),結(jié)果值從好到壞依次是:

Null > system > const > eq_ref > ref > ref_or_null> index_merge > unique_subquery > index_subquery > range > index > ALL

一般來說,得保證查詢至少達(dá)到range級別,最好能達(dá)到ref。

我們在進(jìn)行條件查詢時(shí),建議使用索引,否則將引起全表掃描,IO的開銷和程序的性能都沒法保證!

  • NULL: MySQL在優(yōu)化過程中分解語句,執(zhí)行時(shí)甚至不用訪問表或索引,例如從一個索引列里選取最小值可以通過單獨(dú)索引查找完成。 
  • system:表僅有一行(=系統(tǒng)表)。這是const聯(lián)接類型的一個特例。當(dāng)MySQL對查詢某部分進(jìn)行優(yōu)化,并轉(zhuǎn)換為一個常量時(shí),使用這些類型( system/const )訪問。如將主鍵置于where列表中,MySQL就能將該查詢轉(zhuǎn)換為一個常量。當(dāng)查詢的表只有一行的情況下,使用system。 
  • const:表最多有一個匹配行,它將在查詢開始時(shí)被讀取。因?yàn)閮H有一行,在這行的列值可被優(yōu)化器剩余部分認(rèn)為是常數(shù)。const表很快,因?yàn)樗鼈冎蛔x取一次! 
  • eq_ref:類似ref,區(qū)別就在使用的索引是唯一索引,對于每個索引鍵值,表中只有一條記錄匹配,簡單來說,就是多表連接中使用primary key或者 unique key作為關(guān)聯(lián)條件。這可能是最好的聯(lián)接類型,除了const類型。 
  • ref:表示上述表的連接匹配條件,即哪些列或常量被用于查找索引列上的值。 
  • ref_or_null:該聯(lián)接類型如同ref,但是添加了MySQL可以專門搜索包含NULL值的行。 
  • index_merge:該聯(lián)接類型表示使用了索引合并優(yōu)化方法?!静怀S谩?nbsp;
  • unique_subquery:該類型替換了下面形式的IN子查詢的 ref:value IN (SELECT primary_key FROM single_table WHERE some_expr) unique_subquery是一個索引查找函數(shù),可以完全替換子查詢,效率更高?!静怀S谩?nbsp;
  • index_subquery:該聯(lián)接類型類似于unique_subquery。可以替換IN子查詢,但只適合下列形式的子查詢中的非唯一索引:value IN (SELECT key_column FROM single_table WHERE some_expr)。【不常用】 
  • range:只檢索給定范圍的行,使用一個索引來選擇行。 
  • index:該聯(lián)接類型與ALL相同,F(xiàn)ull Index Scan,index與ALL區(qū)別為index類型只遍歷索引樹。這通常比ALL快,因?yàn)樗饕募ǔ1葦?shù)據(jù)文件小。 
  • ALL:Full Table Scan, MySQL將遍歷全表以找到匹配的行。

6 possible_keys

  • 表示查詢時(shí),可能使用的索引。( MySQL能使用哪個索引在該表中找到行)

7 key

  • 實(shí)際使用的索引(鍵),必然包含在possible_keys中。如果沒有選擇索引,索引是NULL。
  • 要想強(qiáng)制MySQL使用或忽視possible_keys列中的索引,
  • 在查詢中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。

8 key_len

  • 索引的長度 ( 使用的字節(jié)數(shù) )。如果索引是NULL,則長度為NULL。
  • 不損失精確性的情況下,長度越短越好 。key_len顯示的值為索引字段的最大可能長度,
  • 并非實(shí)際使用長度,即key_len是根據(jù)表定義計(jì)算而得,不是通過表內(nèi)檢索出的。

9 ref

  • 使用哪個列或常數(shù),與索引一起被用于從表中查找索引列上的值。( 列與索引的比較,表示上述表的連接匹配條件。)

10 rows

  • MySQL認(rèn)為它執(zhí)行查詢時(shí)必須檢查的行數(shù)既預(yù)估掃描的行數(shù)。

11 filtered

  • 通過表?xiàng)l件過濾出的行數(shù)的百分比估計(jì)值。

12 Extra

Mysql執(zhí)行情況的描述和詳細(xì)說明。

  • Distinct:MySQL發(fā)現(xiàn)第1個匹配行后,停止為當(dāng)前的行組合搜索更多的行。 
  • Not exists:MySQL能夠?qū)Σ樵冞M(jìn)行LEFT JOIN優(yōu)化,發(fā)現(xiàn)1個匹配LEFT JOIN標(biāo)準(zhǔn)的行后,不再為前面的的行組合在該表內(nèi)檢查更多的行。 
  • range checked for each record (index map: #):MySQL沒有發(fā)現(xiàn)好的可以使用的索引,但發(fā)現(xiàn)如果來自前面的表的列值已知,可能部分索引可以使用。 
  • Using filesort:當(dāng)Query中包含 order by 操作,而且無法利用索引完成的排序操作稱為“文件排序”。 
  • Using index:只使用索引樹中的信息而不需要進(jìn)一步搜索讀取實(shí)際的行來檢索表中的列信息。 
  • Using temporary:為了解決查詢,MySQL需要創(chuàng)建一個臨時(shí)表來容納結(jié)果集,常見于排序和分組查詢,常見 group by、order by。 
  • Using where:不用讀取表中所有信息,僅通過索引就可以獲取所需數(shù)據(jù),這發(fā)生在對表的全部的請求列都是同一個索引的部分的時(shí)候,表示mysql服務(wù)器將在存儲引擎檢索行后再進(jìn)行過濾。 
  • Using sort_union(…)、Using union(…)、Using intersect(…):這些函數(shù)說明如何為index_merge聯(lián)接類型合并索引掃描。 
  • Using index for group-by:類似于訪問表的Using index方式,Using index for group-by表示MySQL發(fā)現(xiàn)了一個索引,可以用來查詢GROUP BY或DISTINCT查詢的所有列,而不要額外搜索硬盤訪問實(shí)際的表。 
  • Using join buffer:改值強(qiáng)調(diào)了在獲取連接條件時(shí)沒有使用索引,并且需要連接緩沖區(qū)來存儲中間結(jié)果。如果出現(xiàn)了這個值,那應(yīng)該注意,根據(jù)查詢的具體情況可能需要添加索引來改進(jìn)能。 
  • Impossible where:這個值強(qiáng)調(diào)了where語句會導(dǎo)致沒有符合條件的行(通過收集統(tǒng)計(jì)信息不可能存在結(jié)果)。 
  • Select tables optimized away:這個值意味著僅通過使用索引,優(yōu)化器可能僅從聚合函數(shù)結(jié)果中返回一行。 
  • No tables used:Query語句中使用from dual 或不含任何from子句。

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入解析mysql中order by與group by的順序問題

    深入解析mysql中order by與group by的順序問題

    本篇文章是對mysql中order by與group by的順序問題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • MySQL中將一列以逗號分隔的值行轉(zhuǎn)列的實(shí)現(xiàn)

    MySQL中將一列以逗號分隔的值行轉(zhuǎn)列的實(shí)現(xiàn)

    這篇文章主要介紹了MySQL中將一列以逗號分隔的值行轉(zhuǎn)列的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • MySQL表中添加數(shù)據(jù)的方法

    MySQL表中添加數(shù)據(jù)的方法

    這篇文章主要介紹了MySQL表中添加數(shù)據(jù)的方法,本文通過sql語句給大家詳細(xì)講解,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-11-11
  • Linux下mysql 8.0.15 安裝配置圖文教程以及修改密碼

    Linux下mysql 8.0.15 安裝配置圖文教程以及修改密碼

    這篇文章主要為大家詳細(xì)介紹了Linux下mysql 8.0.15安裝配置圖文教程以及修改密碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • mysql修復(fù)數(shù)據(jù)表的命令方法

    mysql修復(fù)數(shù)據(jù)表的命令方法

    網(wǎng)站運(yùn)行中mysql的數(shù)據(jù)表難免會出現(xiàn)類似"is marked as crashed and should be repaired"的錯誤,我們可以用下面這個命令修復(fù)
    2014-02-02
  • mysql 5.7.18 zip版安裝使用教程

    mysql 5.7.18 zip版安裝使用教程

    這篇文章主要為大家詳細(xì)介紹了mysql 5.7.18 zip版安裝使用教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Mysql復(fù)制表三種實(shí)現(xiàn)方法及grant解析

    Mysql復(fù)制表三種實(shí)現(xiàn)方法及grant解析

    這篇文章主要介紹了Mysql復(fù)制表三種實(shí)現(xiàn)方法及grant解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • mysql拆分字符串作為查詢條件的示例代碼

    mysql拆分字符串作為查詢條件的示例代碼

    本文主要介紹了mysql拆分字符串作為查詢條件的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • mysql命令行愛好者必備工具mycli

    mysql命令行愛好者必備工具mycli

    這篇文章主要介紹了mysql命令行愛好者必備工具mycli的相關(guān)知識,非常不錯,具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-05-05
  • mysql 如何使用JSON_EXTRACT() 取json值

    mysql 如何使用JSON_EXTRACT() 取json值

    這篇文章主要介紹了mysql如何使用JSON_EXTRACT() 取json值的操作方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評論