MySQL中explain用法含義說明

explain是MySQL中執行計劃分析的利器,經常用來分析低效SQL。通過explain我們可以獲取到數據的訪問類型、索引的使用、分區信息等情況。這裏列舉以下explain分析的結果含義。
explain輸出結果樣例

select_type

表示select的類型,常見的取值有simple(簡單表,即不使用表連接或者子查詢)、primary(主查詢,即外層的查詢)、union(union中的第二個或者後面的查詢語句)、subquery(子查詢中的第一個select)等

table

輸出結果集的表

type

表示MySQL在表中找到所需行的方式,或者叫訪問類型。常見的訪問類型有以下幾種:
all、index、range、ref、eq_ref、const/system、null
從左到右,性能由差到好

  • all:全表掃描,MySQL遍歷全表來找到匹配的行
  • index:索引全掃描,MySQL遍歷整個索引來查詢匹配的行
  • range:索引範圍掃描,常見於<、<=、>、>=、between等操作符
  • ref:使用非唯一索引掃描或唯一索引的前綴掃描,返回匹配某個單獨值的記錄行
  • eq_ref:類似ref,區別就在使用的索引是唯一索引(unique),對於每個索引值,表中只有一條記錄匹配
  • const/system:單表中最多有一個匹配行,查詢起來非常迅速,所以這個匹配行中的其他列的值可以被優化器在當前查詢中當做常量來處理
  • null:MySQL不用訪問表或者索引,直接就能夠得到結果

possible_keys

表示查詢時可能使用的索引

key

表示實際使用的索引

key_len

使用到索引的長度

rows

掃描行的數量

extra

執行情況的說明和描述,包含不適合在其他列中顯示但是對執行計劃非常重要的額外信息

partitions

如果進行了分區的話,返回訪問的SQL分區

以上基本就是explain結果的基本字段含義了。另外MySQL還可以追加使用"show warnings\G"命令,來查看SQL真正被執行之前優化器做了哪些改寫。如:
show warning

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章