SQL執行計划分析


explain執行計划中的字段以及含義在下面的博客中有詳細講述:

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

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

EXPLAIN命令是查看查詢優化器如何決定執行查詢的主要的方法,學會解釋EXPLAIN將幫助我們了解SQL優化器是如何工作的。執行計划可以告訴我們SQL如何使用索引,連接查詢的執行順序,查詢的數據行數。

如何使用執行計划?

要使用EXPLAIN,只需要在查詢的SELECT關鍵字之前增加EXPLAIN這個詞。
下面是一個簡單EXPLAIN的結果:

執行計划重點關注 type、key、key_len、rows、extra

type:type如果為ALL,表示全盤掃描,也是效率最低的

key:表示使用了哪個索引,如果沒有使用為null

key_len:表示索引字段的最大可能長度,KEY_LEN的長度由字段定義計算而來,並非數據的實際長度,長度越小,效率越高。

    主要是看復合索引用到了哪些列 因為很多復合索引可能只是用到了一列或者某幾列,聯合索引是從左往右來的,算到什么地方,就代表用哪一列

    假如有一個表 id int not null ,name varchar(32) not null 並且是utf8字符類型的表 假如索引是id_name 如果只用到id列那么key_len 就是4 如果兩列

              都用到了那 key_len 就是 4+32*3+2 如果不是not null 就是4+1+32*3+2+1了

rows:表示MySQL通過哪些列或常量被用於查找索引列上的值,ROWS值的大小是個統計抽樣結果,並不十分准確。全盤掃描時,值最大,接近表中數據行數。建議值小於5000

extra:如果出現using filesort 表示sql中有排序。應盡量避免在磁盤中排序。讓其盡量通過索引字段排序。

以下是執行計划中的字段的詳細解釋:

原文出處:

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

分析執行計划中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語句。

 

具體sql優化推薦案例:

http://www.cnblogs.com/tangyanbo/p/4462734.html#!comments


免責聲明!

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



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