Mysql中對於每條執行語句都有一個執行計劃,我們用explain+sql語句,就可以查詢mysql對該條語句是怎麼執行的,查了多少行,是否用到索引等,以此來幫助我們分析sql語句的性能,改善sql語句的編寫。如下圖:
此片文章來記錄一下如何看這一堆東西,每個字段是啥意思。
1.Type:表示的是單表查詢的方式
const:
用主鍵的等值查詢,
唯一二級索引的等值查詢(不爲null的情況)
注:主鍵等值是非常快的,直接在聚簇索引中定位,唯一二級索引需要回表一次,也是極快的,但是由於唯一索引不限制null的數量,當索引值爲null的情況,會回表多次,所以如果是null值不是const的方式 ,至少是ref方式
ref:
普通二級索引等值查找
注:查找方式就是二級索引找完,找到主鍵,回表到聚簇索引再查的方式
ref_or_null:有時候我們不僅想找出某個二級索引列的值等於某個常數的記錄,還想把該列的值爲NULL
的記錄也找出來
range:索引範圍查找
index:查找的值都在二級索引中,直接遍歷二級索引的方式
all:不用索引的全表掃描
2.ref:當使用索引列等值匹配的條件去執行查詢時,也就是在訪問方法是const
、eq_ref
、ref
、ref_or_null
、unique_subquery
、index_subquery
其中之一時,ref
列展示的就是與索引列作等值匹配的東東是個啥,比如只是一個常數或者是某個列。大家看下邊這個查詢
3.rows:預計掃描行數
4.filtered:
如果使用的是索引執行的單表掃描,那麼計算驅動表扇出的時候需要估計出滿足除使用到對應索引的搜索條件外的其他搜索條件的記錄有多少條。
如果使用的是全表掃描的方式執行的單表查詢,那麼計算驅動表扇出時需要估計出滿足搜索條件的記錄到底有多少條
5.Extra
Extra
列是用來說明一些額外信息的,我們可以通過這些額外信息來更準確的理解MySQL
到底將如何執行給定的查詢語句
Using index :當我們的查詢列表以及搜索條件中只包含屬於某個索引的列,也就是在可以使用索引覆蓋的情況下,在Extra
列將會提示該額外信息。即使用index方式搜索單表的時候
using where:當我們使用全表掃描來執行對某個表的查詢,並且該語句的WHERE
子句中有針對該表的搜索條件時,在Extra
列中會提示上述額外信息