mysql的執行計劃-explain

mysql使用 explain來查看執行計劃:根據MySQL執行計劃的輸出,分析索引使用情況、掃描的行數可以預估查詢效率;進而可以重構SQL語句、調整索引,提升查詢效率。

https://www.cnblogs.com/sunjingwu/p/10755823.html

一.id ,select 查詢序列號

1 id相同,從上往下一次執行;2 id不同,id越大優先級越高,越先被執行

二.select_type,查詢語句類型

(1)SIMPLE(簡單SELECT的查詢,不使用UNION或子查詢等)

(2) PRIMARY(查詢中若包含任何複雜的子部分,最外層的select被標記爲PRIMARY)

 (3) UNION(UNION中的第二個或後面的SELECT語句)

(4) DEPENDENT UNION(UNION中的第二個或後面的SELECT語句,取決於外面的查詢)

(5) UNION RESULT(UNION的結果)

(6) SUBQUERY(子查詢中的第一個SELECT)

(7) DEPENDENT SUBQUERY(子查詢中的第一個SELECT,取決於外面的查詢)

(8)DERIVED(派生/衍生表的SELECT, FROM子句的子查詢)

(9) MATERIALIZED(物化子查詢) 在SQL執行過程中,第一次需要子查詢結果時執行子查詢並將子查詢的結果保存爲臨時表 ,後續對子查詢結果集的訪問將直接通過臨時表獲得。

(10) UNCACHEABLE SUBQUERY(一個子查詢的結果不能被緩存,必須重新評估外鏈接的第一行)

(11) UNCACHEABLE UNION(UNION查詢的結果不能被緩存)

三、table,查詢涉及的表或衍生表

四、partitions查詢涉及到的分區

五、type 提供了判斷查詢是否高效的重要依據依據

過 type 字段, 我們判斷此次查詢是全表掃描還是索引掃描等

(1)system: 表中只有一條數據,相當於系統表; 這個類型是特殊的 const 類型;

(2)const: 主鍵或者唯一索引的常量查詢,表格最多隻有1行記錄符合查詢,通常const使用到主鍵或者唯一索引進行定值查詢

(3)eq_ref: 除了system和const類型之外,效率最高的連接類型;唯一索引掃描,對於每個索引鍵,表中只有一條記錄與之對應;常用於主鍵或唯一索引掃描

equ_ref用於唯一索引查詢,對每個索引鍵,表中只有一條或零條記錄與之匹配。

(4)ref:此類型通常出現在多表的 join 查詢, 針對於非唯一或非主鍵索引, 或者是使用了最左前綴規則索引的查詢

(5)range: 表示使用索引範圍查詢, 通過索引字段範圍獲取表中部分數據記錄. 這個類型通常出現在 =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, IN() 操作中。

(6)index: 掃描索引樹

如果索引是複合索引,並且複合索引列滿足select所需的所有數據,則僅掃描索引樹。在這種情況下,Extra爲 Using index。僅索引掃描通常比ALL索引的大小通常小於表數據更快 。

索引列不滿足select所需的所有數據,此時需要回表掃描;按索引順序查找數據行。 Uses index沒有出現在 Extra列中。

(7)ALL: 全表掃描,沒有任何索引可以使用時。這是最差的情況,應該避免。

六、possible_keys:指示MySQL可能使用到的索引。

七、key:MySQL查詢實際使用到的索引。

八、key_len:表示索引中使用的字節數(只計算利用索引作爲index key的索引長度,不包括用於group by/order by的索引長度)

  1. 一般地,key_len 等於索引列類型字節長度,例如int類型爲4 bytes,bigint爲8 bytes;
  2. 如果是字符串類型,還需要同時考慮字符集因素,例如utf8字符集1個字符佔3個字節,gbk字符集1個字符佔2個字節
  3. 若該列類型定義時允許NULL,其key_len還需要再加 1 bytes
  4. 若該列類型爲變長類型,例如 VARCHAR(TEXT\BLOB不允許整列創建索引,如果創建部分索引也被視爲動態列類型),其key_len還需要再加 2 bytes

字符集會影響索引長度、數據的存儲空間,爲列選擇合適的字符集;變長字段需要額外的2個字節,固定長度字段不需要額外的字節。而null都需要1個字節的額外空間,所以以前有個說法:索引字段最好不要爲NULL,因爲NULL讓統計更加複雜,並且需要額外一個字節的存儲空間。

九、ref:顯示該表的索引字段關聯了哪張表的哪個字段

十、rows:根據表統計信息及選用情況,大致估算出找到所需的記錄或所需讀取的行數,數值越小越好

十一、filtered:返回結果的行數佔讀取行數的百分比,值越大越好

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章