mysql的執行計畫 explain

2021-10-07 10:45:21 字數 2622 閱讀 1309

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

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

(1)******(簡單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: 表示使用索引範圍查詢, 通過索引字段範圍獲取表中部分資料記錄. 這個型別通常出現在 =, <>, >, >=, , between, in() 操作中。

(6)index: 掃瞄索引樹

如果索引是復合索引,並且復合索引列滿足select所需的所有資料,則僅掃瞄索引樹。在這種情況下,extrausing index。僅索引掃瞄通常比all索引的大小通常小於表資料更快 。

索引列不滿足select所需的所有資料,此時需要回表掃瞄;按索引順序查詢資料行。uses index沒有出現在extra列中。

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

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

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

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

一般地,key_len 等於索引列型別位元組長度,例如int型別為4 bytes,bigint為8 bytes;如果是字串型別,還需要同時考慮字符集因素,例如utf8字符集1個字元佔3個位元組,gbk字符集1個字元佔2個位元組若該列型別定義時允許null,其key_len還需要再加 1 bytes若該列型別為變長型別,例如 varchar(text\blob不允許整列建立索引,如果建立部分索引也被視為動態列型別),其key_len還需要再加 2 bytes

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

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

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

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

mysql執行計畫 MySQL 執行計畫

1.執行計畫的定義 什麼是執行計畫 查詢計畫 呢?執行計畫就是一系列的操作步驟。sql是宣告性語言,它只告訴資料庫要查詢什麼,但並不告訴資料庫如何去查。資料庫所要做的就是基於演算法和統計資訊計算出一條最佳的訪問路徑。這個工作是由優化器來完成的。優化器會比較不同的執行計畫,然後選擇其中最優的一套。2....

mysql 生成執行計畫 MySQL執行計畫

和很多其他關係型資料庫不通,mysql並不會在生成查詢位元組碼來執行查詢。mysql生成查詢的一棵指令樹,然後通過儲存引擎執行完成這棵指令樹並返回結果。最終的執行計畫包含了重構查詢的全部資訊。如果某個查詢執行explain extended 之後,在執行show warnings,就可以看到重構出的...

mysql 查詢執行計畫 MySql執行計畫的檢視

一。什麼是資料庫執行計畫 利用乙個sql語句,你可能要server取出所有news表中的資訊.當server收到的這條sql的時候,第一件事情並不是解析它.如果這條sql沒有語法錯誤,server才會繼續工作.server會決定最好的計算方式.server會選擇,是讀整個news表好呢,還是利用索引...