1. 程式人生 > >【MySQL】SQL執行計劃分析

【MySQL】SQL執行計劃分析

https://blog.csdn.net/da_guo_li/article/details/79008016

執行計劃能告訴我們什麼?

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

 

如何使用執行計劃?

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

    下面是一個簡單EXPLAIN的結果:

 


解釋執行計劃中EXPLAIN的列

    ID列

        是一位數字,表示執行SELECT語句的順序。
        id值相同執行順序從上到下。
        id值不同時id值大的先執行。

    SELECT_TYPE

        這一列顯示了對應行是簡單還是複雜SELECT.取值如下:SIMPLE值意味著查詢不包括子查詢和UNION。查詢有任何複雜的子部分,則最外層標記為PRIMARY.取值如下:

 


    TABLE


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

    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語句。
---------------------
作者:da_guo_li
來源:CSDN
原文:https://blog.csdn.net/da_guo_li/article/details/79008016
版權宣告:本文為博主原創文章,轉載請附上博文連結!