Mysql Explain Type

  • 前言

當咱們執行sql,通常都會用Explain來查看sql的效率如何。今天在看sql執行效率的時候,忘記了其中Type的意思,如今在此記錄一下。sql

  • 效率

這裏的type指的是訪問類型,各個效率高低以下:大數據

all < index < range < index_subquery < unique_subquery < index_merge < ref_or_null < ref < eq_ref < const < system
  • 介紹

下面就開始介紹各個訪問類型:優化

1. allcode

全表掃描。在大數據量的時候效率極低。排序

2. index索引

全索引排序。根據Extra的內容分如下幾種狀況:table

Using Index:覆蓋索引,即**只須要**經過索引就能夠返回查詢所須要的數據
Using Where:查詢列未用到索引
Using Index  Using Where:其中的查詢列是索引,可是並非前導列,所以實際上是無法用到這個索引的
Null:查詢列有些不是索引,須要回表來查詢未被索引覆蓋的字段(不是純粹用了索引,也不是徹底沒用到索引)

3. range效率

有範圍的索引排序。常見的以下:搜索

BETWEEN   AND    <    >    IN    OR

4. index_subquery數據

非惟一性索引,通常出如今IN查詢中。

5. unique_subquery

通常出如今IN查詢中。

6. index_merge

使用了索引合併優化。(對多個索引分別進行了條件的查詢,最後對這幾個查詢的結果進行合併交集運算)

7. ref_or_null

相似ref。區別是他會額外的搜索包含null的記錄,他會對其進行一些優化。(例如:SELECT * FROM table WHERE age = 18 and name is null)

8. ref

利用查詢索引來進行搜索。(非主鍵以及UNIQUE)

9. eq_ref

查詢列是主鍵或者非NULL的UNIQUE索引,經常使用在聯合查詢。(例如:SELECT * FROM ref_table,other_table WHERE ref_table.key_column=other_table.column => ref_table.key_column是主鍵或者非NULL的UNIQUE索引)

10. const

查詢條件是主鍵或者非NULL的UNIQUE索引,所以結果只有一條,同時優化過程當中查詢列值會轉成常量。

11. system

表中數據只有一行的狀況。

12. NULL

不用訪問表就能夠直接獲得結果。(例如:SELECT 1)

  • 最後

寫sql的時候多用Explain,容易幫助本身找到寫的sql是否有問題,是否能夠進一步優化。

在此記錄,下次本身也能夠方便查找!

相關文章
相關標籤/搜索