MySQL執行計畫詳解

2021-10-18 07:10:28 字數 848 閱讀 7538

在進行sql優化的時候我們常常使用explain來檢視執行計畫,這裡來詳細解釋一下執行計畫的字段意義

表示select語句的順序,id值大的先執行,id相同則從上到下執行

這一列顯示了 對應行是簡單還是複雜select, ******值意味著查詢不包括子查詢和union。查詢有任何複雜的子部分,則最外層標記為primary

輸出資料行所在的表的名稱,table列中經常出現類似或它表示該錶為臨時表。<>帶有數字,它是select查詢的id

對於分割槽表,顯示查詢的分割槽id,對於非分割槽表,顯示為null

訪問型別,效能由高到低如下:

查詢涉及到的字段上存在索引,則該索引將被列出,但不一定被查詢實際使用

key列中顯示的索引則是最終選用的執行計畫所使用的索引,key列顯示為primary時,表示使用主鍵,null表示沒有使用索引

表示索引中使用的位元組數,查詢中使用的索引的長度(最大可能長度),並非實際使用長度,理論上長度越短越好

訪問方法是ref時,ref列顯示提供了哪種值作為參考條件。若指定常數值則ref列值顯示為const。若為其他資料表的列值,則顯示資料表名與列名

根據表統計資訊及索引選用情況,大致估算出找到所需的記錄所需要讀取的行數

表示返回結果的行數佔需讀取行數的百分比,filter列的值越大越好

不適合在其他欄位中顯示,但是十分重要的額外資訊,extra列中顯示的語句只有固定幾個,一般會同時顯示2~3個

mysql 執行計畫詳解

1 id列數字越大越先執行,如果說數字一樣大,那麼就從上往下依次執行,id列為null的就表是這是乙個結果集,不需要使用它來進行查詢。2 select type列常見的有 a 表示不需要union操作或者不包含子查詢的簡單select查詢。有連線查詢時,外層的查詢為 且只有乙個 b primary ...

mysql執行計畫詳解

引言 實際專案開發中,由於我們不知道實際查詢的時候資料庫裡發生了什麼事情,資料庫軟體是怎樣掃瞄表 怎樣使用索引的,因此,我們能感知到的就只有 sql語句執行的時間,在資料規模不大時,查詢是瞬間的,因此,在寫sql語句的時候就很少考慮到效能的問題。但是當資料規模增大,如千萬 億的時候,我們運 行同樣的...

MYSQL執行計畫字段詳解

mysql檢視執行計畫 explain sql 輸出執行計畫。explain extended sql 會在 explain 的基礎上額外提供一些查詢優化的資訊。緊隨其後通過 show warnings 命令可以 得到優化後的查詢語句,從而看出優化器優化了什麼。額外還有 filtered 列,是乙個...