MySQL中使用explain查看執行計劃

目錄

前言

使用explain命令能夠查看一條查詢語句的執行計劃,這篇文章記錄一下查詢計劃的各個屬性的值極其含義.html

2019-06-03-20-47-12

那麼咱們按照圖中的順序逐個字段的看一下.mysql

本文采用官網的數據庫樣本,下載地址:MySQL官方數據庫sql

id

一組數據,表示任務被執行的順序,序號越大的任務越先執行.數據庫

select_type

id select_type description
1 SIMPLE 不包含任何子查詢或union等查詢
2 PRIMARY 包含子查詢最外層查詢就顯示爲 PRIMARY
3 SUBQUERY 在select或 where字句中包含的查詢
4 DERIVED from字句中包含的查詢
5 UNION 出如今union後的查詢語句中
6 UNION RESULT 從UNION中獲取結果集,例如上文的第三個例子

table

查詢的數據表,當從衍生表中查數據時會顯示 x 表示對應的執行計劃id。學習

partitions

表的分區字段,沒有分區的話則爲null.優化

type

這條查詢語句訪問數據的類型.全部可取值的範圍:code

  • ALL 掃描全表數據
  • index 使用索引
  • range 索引範圍查找
  • ref 非惟一性索引掃描,返回匹配某個單獨值的全部行。常見於使用非惟一索引即惟一索引的非惟一前綴進行的查找
  • eq_ref 惟一性索引掃描,對於每一個索引鍵,表中只有一條記錄與之匹配。常見於主鍵或惟一索引掃描
  • const,system 當MySQL對查詢某部分進行優化,並轉換爲一個常量時,使用這些類型訪問
  • .NULL:MySQL在優化過程當中分解語句,執行時甚至不用訪問表或索引

possible_keys

此次查詢可能使用的索引,可是不必定是真正使用的索引.orm

key

查詢真正使用的索引,若沒有使用索引,顯示爲NULL.cdn

key_len

使用索引的長度,在使用聯合索引的時候能夠根據這一列來推算使用了哪些最左前綴索引.htm

計算方式:

  • 全部字段若是沒有設置爲not null,則須要加一個字節.
  • 定長字段佔用實際的字節長度,好比:int佔用4個字節,datatime佔用4個字節.
  • 變長字段佔用多佔用兩個字節,好比varchar(20)將會佔用20*4+2 = 82個字節.
  • 不一樣的字符集佔用字節不同,上面舉例是使用的utf8mb4字符集.

ref

表示上述表的鏈接匹配條件,即哪些列或常量被用於查找索引列上的值

rows

返回估算的結果集數目,並非一個準確的值。

extra

包含一些其餘信息,常見的有如下幾種:

  • Using index 表示相應的select操做中使用了覆蓋索引(Covering Index)
  • Using where 表示拿到記錄後進行「後過濾」(Post-filter),若是查詢未能使用索引,Using where的做用只是提醒咱們MySQL將用where子句來過濾結果集
  • Using temporary 表示mysql在這個查詢語句中使用了臨時表.
  • Using filesort 表示使用了文件排序,即查詢中的排序沒法經過索引來完成.

參考文章

MySQL官方文檔


完。



ChangeLog

2019-06-03 完成

以上皆爲我的所思所得,若有錯誤歡迎評論區指正。

歡迎轉載,煩請署名並保留原文連接。

聯繫郵箱:huyanshi2580@gmail.com

更多學習筆記見我的博客------>呼延十

相關文章
相關標籤/搜索