最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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中的第二個(gè)或后面的SELECT語句。 
  • DEPENDENT UNION(dependent union):UNION中的第二個(gè)或后面的SELECT語句,取決于外面的查詢。 
  • UNION RESULT(union result):UNION的結(jié)果,union語句中第二個(gè)select開始后面所有select。 
  • SUBQUERY(subquery):子查詢中的第一個(gè)SELECT,結(jié)果不依賴于外部查詢。 
  • DEPENDENT SUBQUERY(dependent subquery):子查詢中的第一個(gè)SELECT,依賴于外部查詢。 
  • DERIVED(derived):派生表的SELECT (FROM子句的子查詢)。 
  • UNCACHEABLE SUBQUERY(uncacheable subquery):(一個(gè)子查詢的結(jié)果不能被緩存,必須重新評估外鏈接的第一行)

3 table

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

4 partitions

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

5 TYPE

  • type顯示的是訪問類型,是較為重要的一個(gè)指標(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í)甚至不用訪問表或索引,例如從一個(gè)索引列里選取最小值可以通過單獨(dú)索引查找完成。 
  • system:表僅有一行(=系統(tǒng)表)。這是const聯(lián)接類型的一個(gè)特例。當(dāng)MySQL對查詢某部分進(jìn)行優(yōu)化,并轉(zhuǎn)換為一個(gè)常量時(shí),使用這些類型( system/const )訪問。如將主鍵置于where列表中,MySQL就能將該查詢轉(zhuǎn)換為一個(gè)常量。當(dāng)查詢的表只有一行的情況下,使用system。 
  • const:表最多有一個(gè)匹配行,它將在查詢開始時(shí)被讀取。因?yàn)閮H有一行,在這行的列值可被優(yōu)化器剩余部分認(rèn)為是常數(shù)。const表很快,因?yàn)樗鼈冎蛔x取一次! 
  • eq_ref:類似ref,區(qū)別就在使用的索引是唯一索引,對于每個(gè)索引鍵值,表中只有一條記錄匹配,簡單來說,就是多表連接中使用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是一個(gè)索引查找函數(shù),可以完全替換子查詢,效率更高?!静怀S谩?nbsp;
  • index_subquery:該聯(lián)接類型類似于unique_subquery??梢蕴鎿QIN子查詢,但只適合下列形式的子查詢中的非唯一索引:value IN (SELECT key_column FROM single_table WHERE some_expr)?!静怀S谩?nbsp;
  • range:只檢索給定范圍的行,使用一個(gè)索引來選擇行。 
  • 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能使用哪個(gè)索引在該表中找到行)

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

  • 使用哪個(gè)列或常數(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個(gè)匹配行后,停止為當(dāng)前的行組合搜索更多的行。 
  • Not exists:MySQL能夠?qū)Σ樵冞M(jìn)行LEFT JOIN優(yōu)化,發(fā)現(xiàn)1個(gè)匹配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)建一個(gè)臨時(shí)表來容納結(jié)果集,常見于排序和分組查詢,常見 group by、order by。 
  • Using where:不用讀取表中所有信息,僅通過索引就可以獲取所需數(shù)據(jù),這發(fā)生在對表的全部的請求列都是同一個(gè)索引的部分的時(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)了一個(gè)索引,可以用來查詢GROUP BY或DISTINCT查詢的所有列,而不要額外搜索硬盤訪問實(shí)際的表。 
  • Using join buffer:改值強(qiáng)調(diào)了在獲取連接條件時(shí)沒有使用索引,并且需要連接緩沖區(qū)來存儲中間結(jié)果。如果出現(xiàn)了這個(gè)值,那應(yīng)該注意,根據(jù)查詢的具體情況可能需要添加索引來改進(jìn)能。 
  • Impossible where:這個(gè)值強(qiáng)調(diào)了where語句會導(dǎo)致沒有符合條件的行(通過收集統(tǒng)計(jì)信息不可能存在結(jié)果)。 
  • Select tables optimized away:這個(gè)值意味著僅通過使用索引,優(yōu)化器可能僅從聚合函數(shù)結(jié)果中返回一行。 
  • No tables used:Query語句中使用from dual 或不含任何from子句。

總結(jié)

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

相關(guān)文章

  • mysql的集群模式 galera-cluster部署詳解

    mysql的集群模式 galera-cluster部署詳解

    這篇文章主要介紹了mysql的集群模式 galera-cluster部署詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-02-02
  • MySQL數(shù)據(jù)庫事務(wù)原理及應(yīng)用

    MySQL數(shù)據(jù)庫事務(wù)原理及應(yīng)用

    MySQL數(shù)據(jù)庫事務(wù)是指一組數(shù)據(jù)庫操作,要么全部執(zhí)行成功,要么全部回滾。事務(wù)可以確保數(shù)據(jù)的一致性和完整性,避免了多個(gè)用戶同時(shí)對同一數(shù)據(jù)進(jìn)行修改所帶來的問題。MySQL通過事務(wù)日志記錄事務(wù)的操作,支持事務(wù)的回滾和提交等操作
    2023-04-04
  • mysql 判斷是否為子集的方法步驟

    mysql 判斷是否為子集的方法步驟

    這篇文章主要介紹了mysql 判斷是否為子集的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • MySQL order by limit 分頁數(shù)據(jù)重復(fù)問題

    MySQL order by limit 分頁數(shù)據(jù)重復(fù)問題

    在MySQL中我們通常會采用limit來進(jìn)行翻頁查詢,比如limit(0,10)表示列出第一頁的10條數(shù)據(jù),limit(10,10)表示列出第二頁,但是,當(dāng)limit遇到order by的時(shí)候,可能會出現(xiàn)翻到第二頁的時(shí)候,竟然又出現(xiàn)了第一頁的記錄,下面就來介紹一下該問題的解決
    2026-03-03
  • MySQL 分表優(yōu)化試驗(yàn)代碼

    MySQL 分表優(yōu)化試驗(yàn)代碼

    我們的項(xiàng)目中有好多不等于的情況。今天寫這篇文章簡單的分析一下怎么個(gè)優(yōu)化法。
    2010-04-04
  • 遠(yuǎn)程連接服務(wù)器mysql,連接失敗問題及解決

    遠(yuǎn)程連接服務(wù)器mysql,連接失敗問題及解決

    本文主要介紹了如何設(shè)置MySQL遠(yuǎn)程訪問權(quán)限,首先檢查并開啟防火墻,然后開放MySQL的3306端口,接著設(shè)置新的具有遠(yuǎn)程訪問權(quán)限的賬戶,并并更新用戶權(quán)限;最后重啟MySQL,文中建議使用第二種方案,即創(chuàng)建新用戶并賦予其遠(yuǎn)程訪問權(quán)限
    2026-05-05
  • MySQL數(shù)據(jù)庫實(shí)現(xiàn)本地和異地備份的全面指南

    MySQL數(shù)據(jù)庫實(shí)現(xiàn)本地和異地備份的全面指南

    本文將分享一份改進(jìn)版的數(shù)據(jù)庫備份腳本,并結(jié)合實(shí)際案例,闡述如何定期備份MySQL數(shù)據(jù)庫,并實(shí)現(xiàn)本地和異地備份,有需要的小伙伴可以參考一下
    2025-09-09
  • 快速解決mysql導(dǎo)數(shù)據(jù)時(shí),格式不對、導(dǎo)入慢、丟數(shù)據(jù)的問題

    快速解決mysql導(dǎo)數(shù)據(jù)時(shí),格式不對、導(dǎo)入慢、丟數(shù)據(jù)的問題

    這篇文章主要介紹了快速解決mysql導(dǎo)數(shù)據(jù)時(shí),格式不對、導(dǎo)入慢、丟數(shù)據(jù)的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • MySQL分庫分表的幾種方式

    MySQL分庫分表的幾種方式

    這篇文章主要介紹了MySQL分庫分表的幾種方式,分庫分表方案是對關(guān)系型數(shù)據(jù)庫數(shù)據(jù)存儲和訪問機(jī)制的一種補(bǔ)充,下文更多相關(guān)介紹需要的小伙伴可以參考一下
    2022-04-04
  • MySQL主從復(fù)制與讀寫分離原理及用法詳解

    MySQL主從復(fù)制與讀寫分離原理及用法詳解

    這篇文章主要介紹了MySQL主從復(fù)制與讀寫分離原理及用法,結(jié)合實(shí)例形式詳細(xì)分析了mysql數(shù)據(jù)庫主從復(fù)制、讀寫分離基本概念、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-01-01

最新評論

浙江省| 疏附县| 庄浪县| 卢氏县| 三门县| 冷水江市| 诸城市| 辽阳县| 沅江市| 普兰店市| 宜州市| 海伦市| 庄河市| 青海省| 沭阳县| 枝江市| 呼伦贝尔市| 涟源市| 凤庆县| 锡林郭勒盟| 平山县| 逊克县| 竹山县| 凤阳县| 临猗县| 河曲县| 库车县| 盐城市| 沈阳市| 尼勒克县| 长丰县| 保定市| 镇坪县| 新邵县| 安义县| 湘乡市| 潼南县| 和平县| 安陆市| 青州市| 油尖旺区|