SQL執行計划分析


執行計划能告訴我們什么?

當我們的系統上線后數據庫的記錄不斷增加,之前寫的一些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.取值如下:SIMPLE值意味着查詢不包括子查詢和UNION。查詢有任何復雜的子部分,則最外層標記為PRIMARY.取值如下:

 

 

ABLE

輸出數據行所在的表的名稱

 

 

 

PARTITIONS

對於分區表,顯示查詢的分區ID,對於非分區表,顯示為NULL

 

TYPE

 

 EXTRA

 

 

POSSIBLE_KEYS

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

 

KEY

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

 

 

KEY_LEN

表示索引字段的最大可能長度,KEY_LEN的長度由字段定義計算而來,並非數據的實際長度

REF

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

ROWS

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

Filtered

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

 

執行計划的限制

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

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

早期版本的MySQL只支持對SELECT語句進行分析,如果想要分析UPDATE,INSERT語句需要將它們通過某種手段轉換成SELECT語句。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM