1. 程式人生 > >mysql效能分析利器 EXPALIN

mysql效能分析利器 EXPALIN

在SQL語句之前加上EXPLAIN關鍵字就可以獲取這條SQL語句執行的計劃

那麼返回的這些欄位是什麼呢?

我們先關心一下比較重要的幾個欄位:

1. select_type 查詢型別

1)simple 簡單查詢,沒有UNION和子查詢

2)priamry 主查詢,有UNION或子查詢的最外層查詢

3)union 聯合查詢,有UNION的第二個和以後的查詢

4)subquery 子查詢,有子查詢的除FROM包含的子查詢

5)derived 派生查詢,FROM包含的子查詢

6)dependent union, dependent subquery 受到外部表查詢影響的union和subquery

2.type 查詢方式

依次從好到差:systemconsteq_refreffulltextref_or_nullunique_subqueryindex_subqueryrangeindex_mergeindexALL

ps:  除了all之外,其他的type都可以使用到索引,除了index_merge之外,其他的type只可以用到一個索引

1)system 只有一行資料或者是空表,且引擎是myisam

2)const 常量 WHERE使用唯一索引(主鍵id,或者其他UNIQUE索引欄位)搜尋

3)eq_ref 

4)ref 

常見於輔助索引的等值查詢

5)fulltext 全文索引檢索

6)ref_or_null ref方法類似,只是增加了null值的比較

7)unique_subquery 用於where中的in形式子查詢,子查詢返回不重複值唯一值

8)index_subquery 用於where中的iin形式子查詢,使用到了輔助索引或者in常數列表,子查詢可能返回重複值

9)range 索引範圍掃描,常見於使用>,<,is null,between ,in ,like等運算子的查詢中

10)index_merge 使用了兩個以上的索引,最後取交集或者並集

 

11)index 遍歷索引樹

12)ALL 全表資料掃描

3. extra 額外訊息

4. 其他

1)possible key 此次查詢中可能選用的索引,一個或多個

2)key 查詢真正使用到的索引

3)key_len 索引長度(用到的索引欄位的長度相加,例如用到 id int(8) + age int(5) 索引長度為8+5+2=15,加2是固定額外要加的)

4)rows 估算的掃描行數

5)filtered 儲存引擎返回的資料在server層過濾後,剩下多少滿足查詢的記錄數量的百分比

 

 

 

 

依次從好到差:systemconsteq_refreffulltextref_or_nullunique_subqueryindex_subqueryrangeindex_mergeindexALL