當咱們執行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是否有問題,是否能夠進一步優化。
在此記錄,下次本身也能夠方便查找!