explain之三:MYSQL EXPLAIN語句的extended 選項學習體會,分析診斷工具之二


  MySQL 的explain命令有一個extended選項,我想可以很多人都沒有注意,因為它對命令的輸出結果沒有任何改變,只是增加了一個warning。這個 warning中顯示了MySQL對SQL的解釋,從這個解釋中我們可以看到SQL的執行方式,對於分析SQL還是很有用的。也即explain 的extended 擴展能夠在原本explain的基礎上額外的提供一些查詢優化的信息,這些信息可以通過mysql的show warnings命令得到。下面是一個最簡單的例子。

首先執行對想要分析的語句進行explain,並帶上extended選項

mysql> explain extended select count(*) from test1,test2 where test1.id=test2.id and test2.email='duan@qq.com';

接下來再執行Show Warnings
mysql> show warnings\G;

    explain extended 除了能夠告訴我們mysql的查詢優化能做什么,同時也能告訴我們mysql的查詢優化做不了什么。Mysql performanceExtended EXPLAIN這篇文中中作者就利用explain extended +show warnings 找到了mysql查詢優化器中不能查詢優化的地方。
   從 EXPLAIN extended SELECT * FROM sbtest WHERE id>5 AND id>6 AND c="a" AND pad=c語句的輸出我們得知mysql的查詢優化器不能將id>5 和 id>6 這兩個查詢條件優化合並成一個 id>6。

例如:

mysql> explain extended select * from test1 where id in (select id from test2);

上面是一個子查詢看起來和外部的查詢沒有任何關系,從explain extended的結果我們就可以看看mysql如何優化的:

   不過需要注意的一點是從EXPLAIN extended +show warnings得到“優化以后”的查詢語句可能還不是最終優化執行的sql,或者說explain extended看到的信息還不足以說明mysql最終對查詢語句優化的結果。


相關資源

mysql performance的 explain extended
靜室的explain extended選項
mysql 參考手冊中的EXPLAIN語法(獲取SELECT相關信息) 


免責聲明!

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



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