【mysql】說明輸出格式的總結

下面以mysql數據庫爲例,在運行沒有問題的sql語句前面加上EXPLAIN
在這裏插入圖片描述

列名 中文說明
id SELECT標識符
select_type SELECT類型
table 表名
partitions 匹配的分區
type 聯接類型
possible_keys 可能的索引選擇
key 實際選擇的索引
key_len 用到索引的長度
ref 索引被用於拿一列
rows 預計要檢查的行
filtered 按表條件過濾的行百分比
Extra 附加信息

一、Type

  1. system
    只有一條數據的系統表或者衍生表只有一條數據的主查詢

  2. const
    僅僅能查到一條數據的sql,用於Primary key 或unique索引(類型與索引類型有關)

  3. eq_ref
    唯一性索引,對於每個索引鍵的查詢,返回匹配唯一行數據(有且只有1個,不能多、不能0)
    常見於唯一索引和主鍵索引

  4. ref
    非唯一性索引,對於每個索引鍵的查詢,返回匹配的所有行(0,多)

  5. fulltext
    使用FULLTEXT索引執行連接。

  6. ref_or_null
    這種連接類型類似於ref,但是MySQL額外搜索包含NULL值的行。 此聯接類型優化最常用於解析子查詢。

  7. index_merge
    此聯接類型指示使用索引合併優化。 在這種情況下,輸出行中的鍵列包含使用的索引列表,而key_len包含使用的索引的最長鍵部分的列表。

  8. unique_subquery
    此類型將eq_ref替換爲以下形式的某些IN子查詢:

    value IN (SELECT primary_key FROM single_table WHERE some_expr)
    

    只是一個索引查找函數,可以完全替換子查詢以提高效率。

  9. index_subquery
    此連接類型類似於unique_subquery。 它代替了IN子查詢,但適用於以下形式的子查詢中的非唯一索引:

    value IN (SELECT key_column FROM single_table WHERE some_expr)
    
  10. range
    檢索指定範圍的行,where後面是一個範圍查詢 (between,>,<, 特殊的in)

  11. index
    查詢全部索引中的數據

  12. all
    查詢全部表中的數據

PS:

  1. system,const只是理想情況
  2. 實際達到:ref>range
  3. 上面的5-8很少見到
  4. 上面的十二個從上到下性能逐漸降低

參考文件:

https://dev.mysql.com/doc/refman/8.0/en/explain-output.html#explain-join-types

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