mysql 之執行計畫

2021-09-25 18:43:04 字數 1955 閱讀 4002

原文

執行計畫,簡單的來說,是sql在資料庫中執行時的表現情況,通常用於sql效能分析,優化等場景。在mysql中使用 explain 關鍵字來檢視。如下所示:

1.查詢t_base_user

select * from t_base_user where name="andyqian";

2.檢視上述語句的執行計畫

explain select * from t_base_user where name="andyqian";

執行檢視上述2語句後,我們可以得出以下執行計畫

上面這個執行計畫給到的資訊是: 這是乙個簡單的sql,全表掃瞄,共掃瞄1行,using where條件在t_base_user表中篩選出記錄。發現該語句並沒有走索引,為什麼是這樣的呢?別急,我們緊接著看下一節。上面執行計畫是什麼意思呢?有什麼參考價值呢?

通過上面,我們知道了什麼是執行計畫,也看到了執行計畫到底是什麼東西,現在我們來具體了解一下,mysql執行計畫中,每個屬性代表的是什麼意思?

我們一一來介紹,並說明每個屬性有哪些可選值,以及每個可選值的意思。

名字用途

詳細解釋

id**查詢的順序編號。

降序檢視,id相同的從上到下查檢視。id可以為null ,當table為( union ,m,n )型別的時候,id為null,這個時候,id的順序為 m跟n的後面。

select_type

查詢的方式

下文詳細說明。

table

**名稱

表示輸出行資料所在表

partitions

分割槽名稱

查詢使用到表分割槽的分割槽名。

type

表連線的型別

下文詳細說明。

possible_keys

可能使用到的索引

這裡的索引只是可能會有到,實際不一定會用到。

key使用到的索引

實際使用的索引。

key_len

使用到索引的長度

比如多列索引,只用到最左的一列,那麼使用到索引的長度則為該列的長度,故該值不一定等於 key 列索引的長度。

ref謂詞的關聯資訊

當 join type 為 const、eq_ref 或者 ref 時,謂詞的關聯資訊。可能為 :null(非 const \ eq_ref \ ref join type 時)、const(常量)、關聯的謂詞列名。

rows

掃瞄的行數

該**掃瞄到的行數。這裡注意在mysql裡邊是巢狀鏈結,所以,需要把所有rows相乘就會得到查詢資料行關聯的次數

filtered

實際顯示行數佔掃瞄rows的比例

實際顯示的行數 = rows * filtered / 100

extra

特性使用

效能排序:null->system->const->eq-ref->ref->fulltext->ref_or_null->index_merge->unique_subquery->index_subquery->range->index->all

當 join type 為 eq_ref 或者 ref 時,謂詞的關聯資訊。可能為 :null(非 eq_ref\ref join type時)、const(常量)、關聯的謂詞列名。

常用到using index,使用到索引

using index conditio,使用到索引過濾

using mrr,使用到索引內部排序

using where,使用到where條件

using temporary,使用到臨時表

Mysql之執行計畫

1.explain分析sql語句 例如 explain select from blog info bi inner join uam view unit account uua on bi.account instance id uua.account instance id where bi.i...

mysql執行計畫 MySQL 執行計畫

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

MySQL學習之執行計畫

執行計畫 乙個預估sql語句執行的時間的操作 關鍵字 explain 雖然有mysql優化的措施避免一些不能命中索引的方式,但是最後還是要看sql語句的執行時間,時間短就是好的。執行計畫是以最壞的打算進行預估sql語句執行的時間,所以只能作為參考。以後拿到乙個sql語句的時候,先進行執行計畫。exp...