1. 程式人生 > >Mysql explain各個屬性含義

Mysql explain各個屬性含義

以下全部詳細解析explain各個屬性含義:

    

    各屬性含義:
    id: 查詢的序列號
    select_type: 查詢的型別,主要是區別普通查詢和聯合查詢、子查詢之類的複雜查詢

  • SIMPLE:查詢中不包含子查詢或者UNION
  • 查詢中若包含任何複雜的子部分,最外層查詢則被標記為:PRIMARY
  • SELECTWHERE列表中包含了子查詢,該子查詢被標記為:SUBQUERY

    table: 輸出的行所引用的表
    type: 訪問型別
    

    從左至右,效能由差到好

  1. ALL: 掃描全表
  2. index: 掃描全部索引樹
  3. range: 掃描部分索引,索引範圍掃描,對索引的掃描開始於某一點,返回匹配值域的行,常見於between、<、>等的查詢
  4. ref: 使用非唯一索引或非唯一索引字首進行的查詢
    eq_ref和const的區別:
  5. eq_ref:唯一性索引掃描,對於每個索引鍵,表中只有一條記錄與之匹配。常見於主鍵或唯一索引掃描
  6. const, system: 單表中最多有一個匹配行,查詢起來非常迅速,例如根據主鍵或唯一索引查詢。system是const型別的特例,當查詢的表只有一行的情況下, 使用system。
  7. NULL: 不用訪問表或者索引,直接就能得到結果,如select 1 from test where 1

    possible_keys: 表示查詢時可能使用的索引。如果是空的,沒有相關的索引。這時要提高效能,可通過檢驗WHERE子句,看是否引用某些欄位,或者檢查欄位不是適合索引

    key: 顯示MySQL實際決定使用的索引。如果沒有索引被選擇,是NULL

    key_len: 使用到索引欄位的長度

    注:key_len顯示的值為索引欄位的最大可能長度,並非實際使用長度,即key_len是根據表定義計算而得,不是通過表內檢索出的。

    ref: 顯示哪個欄位或常數與key一起被使用

    rows: 這個數表示mysql要遍歷多少資料才能找到,表示MySQL根據表統計資訊及索引選用情況,估算的找到所需的記錄所需要讀取的行數,在innodb上可能是不準確的

    Extra: 執行情況的說明和描述。包含不適合在其他列中顯示但十分重要的額外資訊。

  1. Using index:表示使用索引,如果只有 Using index,說明他沒有查詢到資料表,只用索引表就完成了這個查詢,這個叫覆蓋索引。
  2. Using where:表示條件查詢,如果不讀取表的所有資料,或不是僅僅通過索引就可以獲取所有需要的資料,則會出現 Using where。