MySQL SQL執行計畫分析

2021-08-14 11:01:24 字數 2116 閱讀 1791

當我們的系統上線後資料庫的記錄不斷增加,之前寫的一些sql語句或者一些orm操作效率變得非常低。我們不得不考慮sql優化,sql優化大概是這樣乙個流程:1.定位執行效率低的sql語句(定位),2.分析為什麼這段sql執行的效率比較低(分析),3.最後根據第二步分析的結構採取優化措施(解決)。而explain命令的作用就是幫助我們分析sql的執**況,屬於第二步。說的規範一點就是:explain命令是檢視查詢優化器如何決定執行查詢的主要的方法。學會解釋explain將幫助我們

了解sql優化器是如何工作的。執行計畫可以告訴我們

sql如何使用索引,連線查詢的執行順序,查詢的資料行數。

要使用explain,只需要在查詢的select關鍵字之前增加explain這個詞。

下面是乙個簡單explain的結果:

id列

是一位數字,表示執行select語句的順序。

id值相同執行順序從上到下。

id值不同時id值大的先執行。

select_type

這一列顯示了

對應行是簡單還是複雜select.取值如下:******值意味著查詢不包括子查詢和union。查詢有任何複雜的子部分,則最外層標記為primary.取值如下:

輸出資料行所在的表的名稱

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

指出mysql能使用哪些索引來優化查詢,查詢所涉及的列上的索引都會被列出,但不一定會被使用

key

查詢優化器優化查詢實際所使用的索引,如果沒有可用的索引,則顯示為null,如查詢使用了覆蓋索引,則該索引僅出現在key列中

key_len

表示索引欄位的最大可能長度,key_len的長度由欄位定義計算而來,並非資料的實際長度

ref

表示哪些列或常量被用於查詢索引列上的值

rows

表示mysql通過哪些列或常量被用於查詢索引列上的值,rows值的大小是個統計抽樣結果,並不十分準確

filtered

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

無法展示儲存過程,觸發器,udf(自定義函式)對查詢的影響

無法使用explain對儲存過程進行分析

早期版本的mysql只支援對select語句進行分析,如果想要分析update,insert語句需要將它們通過某種手段轉換成select語句。

MySQL SQL執行計畫

sql的執行 通訊階段 查詢快取 解析器進行驗證解析,基於語法戒心和詞法解析得到解析樹 優化器,優化執行階段找到sql的最優執行方式 執行器執行計畫 用explain或者desc檢視sql的執行計畫 執行計畫引數 id sql執行的順序,值大的先執行,id一樣的話,按照順序從上至下執行 select...

MySQL執行計畫分析

原文 mysql執行計畫分析 sql執行計畫的輸出可能為多行,每一行代表對乙個資料庫物件的操作 可以看到上面的執行計畫返回了3行結果,id列的值可以看作是sql中所具有的select操作的序號 由於上述sql中只有乙個select,所以id全為1,因此,我們就要按照由上至下讀取執行計畫 按照我們的s...

mysql執行計畫分析

執行計畫是sql在資料庫中執行時的表現情況,通常用於sql效能分析,優化等場景。在mysql中使用 explain 關鍵字來檢視。如下所示 explain select from table where table.id 1執行上面的sql語句後你會看到,下面的表頭資訊 table type pos...