91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL中explain字段的作用是什么

發布時間:2021-07-13 15:33:52 來源:億速云 閱讀:243 作者:Leah 欄目:大數據

這期內容當中小編將會給大家帶來有關MySQL中explain字段的作用是什么,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

Explain命令是查看查詢優化器是如何決定執行查詢的主要方法。這個功能有局限性,并不總會說出真相,但它的輸出是可以獲取的最好信息,值得花時間去了解,因為可以學習到查詢是如何執行的。學會解釋explain將會幫助你了解MySQL優化器是如何工作的。

Explain誤區跟不足

在執行Explain時MySQL不會執行查詢,這是一個誤區。事實上查詢中包括子查詢,那么MySQL實際上會執行子查詢,將其結果放在一個臨時表中,然后完成外層的查詢優化。

雖然我們調用explain可以分析sql語句,但要意識到分析出來的結果也是一個近似結果,別無其他。

  • explain不會告訴你觸發器,存儲過程如何影響查詢

  • 他不會告訴你mysql在查詢執行中所做的特定優化

  • 他不會顯示關于查詢的執行計劃的所有信息

  • 他并不區分具有相同名字的事物。例如,他對內存排序和臨時文件都使用filesort,并且對于磁盤上和內存中的臨時表都顯示using temporary

  • 可能會誤導。例如,他會對一個有著很小limit的查詢顯示全索引掃描

explain列的解釋

MySQL中explain字段的作用是什么

id列

這一列總是包含一個編號,標識select所屬的行。如果在語句當中沒有子查詢活聯合查詢,那么就只會有唯一的select,于是每一行在這個列中都將顯示一個1。否則,內層的select語句一般會順序編號,對應于其在原始語句的位置

MySQL中explain字段的作用是什么

select_type列

這一列顯示了sql語句是簡單的查詢還是復雜的查詢。

簡單查詢顯示的simple,如果有子查詢或者聯合查詢則是primary

SUBQUERY

包含在SELECT列表中的子查詢中的SELECT(換句話說,不 在FROM子句中)標記為SUBQUERY。

DERIVED

DERIVED值用來表示包含在FROM子句的子查詢中的SELECT, MySQL會遞歸執行并將結果放到一個臨時表中。服務器內部稱 其“派生表”,因為該臨時表是從子查詢中派生來的。

UNION

在UNION中的第二個和隨后的SELECT被標記為UNION。第一 個SELECT被標記就好像它以部分外查詢來執行。這就是之前的例子 中在UNION中的第一個SELECT顯示為PRIMARY的原因。如果UNION被 FROM子句中的子查詢包含,那么它的第一個SELECT會被標記 為DERIVED。

UNION RESULT

用來從UNION的匿名臨時表檢索結果的SELECT被標記為UNION RESULT。

除了這些值,SUBQUERY和UNION還可以被標記為DEPENDENT和 UNCACHEABLE。DEPENDENT意味著SELECT依賴于外層查詢中發現的數 據;UNCACHEABLE意味著SELECT中的某些特性阻止結果被緩存于一 個Item_cache中。(Item_cache未被文檔記載;它與查詢緩存不是一回 事,盡管它可以被一些相同類型的構件否定,例如RAND()函數。)

table列

顯示這一步所訪問的數據庫中的表的名稱。

type列

這是最重要的字段之一,顯示查詢使用了何種類型。從最好到最差的連接類型依次為:

system,const,eq_ref,ref,fulltext,ref_or_null,index_merge,unique_subquery,index_subquery,range,index,ALL

  1. system
    系統表,表中只有一行數據

  2. const
    讀常量,最多只會有一條記錄匹配,由于是常量,實際上只需要讀一次。

  3. eq_ref
    最多只會有一條匹配結果,一般是通過主鍵或唯一鍵索引來訪問

  4. ref
    對于來自前面表的每一行,在此表的索引中可以匹配到多行。若聯接只用到索引的最左前綴或索引不是主鍵或唯一索引時,使用ref類型(也就是說,此聯接能夠匹配多行記錄)。
    ref可用于使用'='或'<=>'操作符作比較的索引列。

  5. fulltext
    使用全文索引的時候是這個類型。要注意,全文索引的優先級很高,若全文索引和普通索引同時存在時,mysql不管代價,優先選擇使用全文索引

  6. ref_or_null

跟ref類型類似,只是增加了null值的比較。實際用的不多。

eg.
SELECT * FROM ref_table
WHERE key_column=expr OR key_column IS NULL;
  1. index_merge
    表示查詢使用了兩個以上的索引,最后取交集或者并集,常見and ,or的條件使用了不同的索引,官方排序這個在ref_or_null之后,但是實際上由于要讀取多個索引,性能可能大部分時間都不如range

  2. unique_subquery
    用于where中的in形式子查詢,子查詢返回不重復值唯一值,可以完全替換子查詢,效率更高。
    該類型替換了下面形式的IN子查詢的ref:
    value IN (SELECT primary_key FROM single_table WHERE some_expr)

  3. index_subquery
    子查詢中的返回結果字段組合是一個索引(或索引組合),但不是一個主鍵或唯一索引

  4. range
    索引范圍查詢,常見于使用 =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, IN()或者like等運算符的查詢中。

  5. index
    索引全表掃描,把索引從頭到尾掃一遍

  6. all
    全表掃描,性能最差。

partitions

該列顯示的為分區表命中的分區情況。非分區表該字段為空(null)。

possible_keys

查詢可能使用到的索引都會在這里列出來

key

優化器從possible_keys中選擇使用的索引。

key_len

查詢用到的索引長度(字節數)。key_len只計算where條件用到的索引長度,而排序和分組就算用到了索引,也不會計算到key_len中。

ref

如果是使用的常數等值查詢,這里會顯示const,如果是連接查詢,被驅動表的執行計劃這里會顯示驅動表的關聯字段,如果是條件使用了表達式或者函數,或者條件列發生了內部隱式轉換,這里可能顯示為func

rows(重要)

rows 也是一個重要的字段。這是mysql估算的需要掃描的行數(不是精確值)。

這個值非常直觀顯示 SQL 的效率好壞, 原則上 rows 越少越好.

filtered

這個字段表示存儲引擎返回的數據在server層過濾后,剩下多少滿足查詢的記錄數量的比例,注意是百分比,不是具體記錄數。這個字段不重要

extra

EXplain 中的很多額外的信息會在 Extra 字段顯示, 常見的有以下幾種內容:

. using index : 出現這個說明mysql使用了覆蓋索引,避免訪問了表的數據行,效率不錯。

. using where :這說明服務器在存儲引擎收到行后講進行過濾。

. using temporary :這意味著mysql對查詢結果進行排序的時候使用了一張臨時表

. using filesort :這個說明mysql會對數據使用一個外部的索引排序

上述就是小編為大家分享的MySQL中explain字段的作用是什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宁陕县| 乾安县| 香河县| 荥经县| 石棉县| 柯坪县| 枣强县| 沙湾县| 乌恰县| 凌云县| 监利县| 翼城县| 贞丰县| 阳新县| 定边县| 三明市| 玉溪市| 张家口市| 全南县| 米林县| 德州市| 南宁市| 涿鹿县| 高邮市| 焦作市| 乐昌市| 清新县| 增城市| 郎溪县| 泰和县| 额尔古纳市| 南安市| 东台市| 正定县| 连南| 汉源县| 平和县| 高碑店市| 布尔津县| 南部县| 盱眙县|