MySQL Explain 執行計畫

2022-09-10 11:33:12 字數 2655 閱讀 8772

執行計畫就是sql的執行查詢的順序,以及如何使用索引查詢,返回的結果集行數,可以根據執行計畫結果結合業務對現有sql進行優化

explain 查詢結果有10列,分別表示的含義是:

是乙個有序的編號,是查詢的順序號,有幾個select就顯示幾行,id的順序是按照select出現的順序增長的,id列的值越大執行優先順序越高越先執行,id值相同則從上往下執行,id值為null則最後執行

explain select

*from dmooo_hot_search where type in (select type from dmooo_href where sort =

0)

2.select_type表示查詢中每個select子句的型別

******:表示此查詢不包含union查詢或子查詢

primary:表示此查詢是最外層的查詢(包含子查詢)

subquery:子查詢中的第乙個select

union:表示此查詢是union的第二個或隨後的查詢

dependent union:union中的第二個或隨後的查詢語句,取決於外面的查詢

union result:union的結果

dependent subquery:子查詢中的第乙個select,取決於外面的查詢,即子查詢依賴於外層查詢的結果

derived:衍生,表示匯出表的select(from子句的子查詢)

3.table

表示該語句查詢的表

4.type

優化sql的重要字段,也是判斷sql效能和優化程度的重要指標。取值範圍如下:

const:通過索引一次命中,匹配一行資料

system:表示表中只有一行記錄,相當於系統表

eq_ref:唯一性索引掃瞄,對於每個索引鍵,表中只有一條記錄與之匹配

ref:非唯一性索引掃瞄,返回匹配某個值的所有

range:只檢索給定範圍的行,使用乙個索引來選擇行,一般用於between、>、<

index:只遍歷索引樹

all:表示全表掃瞄,這個型別的查詢是效能最差的查詢之一,隨著表資料量增大,執行效率越慢

執行效率:

all5.possible_keys

表示mysql在執行sql的時候,可能用到的索引資訊,僅僅是可能,實際不一定會用到

6.key

表示mysql執行sql的時候,真正使用到的索引,它是possible_kes的子集

7.key_len

表示查詢時使用索引的位元組數,可以用來評估組合索引是否完全被使用,是優化sql時,評估索引的乙個重要指標

8.rows

mysql查詢優化器根據統計資訊,估算該sql返回結果集需要掃瞄讀取的行數,索引優化之後,掃瞄讀取的行數變多,說明索引設定的不對,或者是查詢引數值型別不對,導致索引失效,需要進行優化

9.filtered

mysql查詢結果的佔比,查詢結果的行數/需要掃瞄的行數(rows) %,百分比越高說明查詢的資料越準確,越**明查找到的資料量越大,結果集越少

10.extra

mysql查詢本身額外的重要資訊,如:排序、where條件、分組等

using where:sql使用了where過濾,效率較高

using temporary:查詢有使用臨時表,一般出現於排序、分組、多表join的情況,查詢效率不高

using index:覆蓋索引掃瞄,表示查詢在索引樹中就可查詢到所需資料,不用掃瞄表資料檔案,效率良好

using filesort:mysql對查詢結果集進行外部排序,不能通過索引順序達到排序效果。效率較差

using join buffer:使用了連線快取,需優化

impossible where:使用where查詢不到結果集,需優化

select table optimized away:在沒有group by 子句的情況下,基於索引優化max、min、count(*)等操作,在查詢計畫之前就要進行計算,需優化

distinct:使用了distinct,在找到第一匹配的元組後即停止找同樣的值的動作,需優化

覆蓋索引:

需要的資料集用索引就可以找到,不必根據索引再去掃瞄資料文體,也可以理解為,索引樹中已經包含了需要的結果集,不必要再進行表掃瞄。

Mysql explain 執行計畫

使用方法,在select語句前加上explain就可以了 如 explain select from test1 explain列的解釋 table 顯示這一行的資料是關於哪張表的 type 這是重要的列,顯示連線使用了何種型別。從最好到最差的連線型別為const eq reg ref range ...

MySql Explain執行計畫

explain執行計畫 例 explain select from user idselect type table partitions type possible keys keykey len refrows filtered extra id 查詢序列號,表示查詢中執行select子句或操作...

MYSQL explain 執行計畫

使用方法,在select語句前加上explain就可以了 如 explain sepmatyfayznlect from test1 explain列的解釋 table 顯示這一行的資料是關於哪張表的 type 這是重要的列,顯示連線使用程式設計客棧了何種型別。從最好到最差的連線型別為const e...