您好,登錄后才能下訂單哦!
explain中怎么查看執行計劃,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
查看user全表查詢的執行計劃:
mysql> explain select * from user;
id表示select查詢語句的執行順序或者是操作表的執行順序。
id的值有二種情況:
鴻蒙官方戰略合作共建——HarmonyOS技術社區
id相同,表示執行的順序是由上至下
id不同,id的序號會是遞增的,id的值越大表示優先級越高,越先被執行。
select_type表示查詢類型,它的值域為:SIMPLE、PRIMARY、SUBQUERY、DERIVED、UNION、UNION RESULT。
SIMPLE:簡單的查詢,不包含子查詢和UNION。
PRIMARY:如果查詢的語句中包含了復雜的子查詢,那么最外層的查詢被標記為PRIMARY。
SUBQUERY:select或者where中的子查詢。
DERIVED:from列表中的子查詢生成的衍生表查詢。
UNION:聯合查詢。
UNION RESULT:從UNION表獲取結果的查詢。
數據行是從哪個表獲取的。
表示查詢使用了哪種類型,它的值域:ALL、index、range、ref、eq_ref、const、system。這是我們優化時重點關注的一個指標。
從最好到最差排序:
system>const>eq_ref>ref>range>index>ALL。
阿里巴巴SQL優化規范:
【推薦】 SQL性能優化的目標:至少要達到 range 級別,要求是ref級別,如果可以是const最好。
說明:
1)const 單表中最多只有一個匹配行(主鍵或者唯一索引),在優化階段即可讀取到數據。
2)ref 指的是使用普通的索引(normal index)。
3)range 對索引進行范圍檢索。
system:表中只有一行記錄的查詢,類似系統表。
eq_ref:多表時唯一索引掃描,對于每一個索引,表中只有一行記錄相匹配。
index:索引物理文件全掃描,速度比較慢,比全表掃描性能好一點。
ALL:全表掃描。
可能應用在這個表的索引,可以會一個或者多個,不一定是實際查詢使用的索引。
查詢中實際使用的索引,如果為null表示沒有使用索引。
如果是覆蓋索引,則只顯示在key中。
表示索引字段的最大可能長度,并不是實際的長度,它是根據表定義得到的,而不是通過表檢索得到的。長度越短越好。
表示索引的哪一列被使用了,可能是個常數。哪些列或者常量被用于查找索引列上的值。
根據表的信息和索引使用情況,大致估算的查找到所需的記錄需要掃描的行數。越小越好。
擴展信息。
阿里巴巴SQL優化規范:
【推薦】利用覆蓋索引來進行查詢操作,避免回表。
說明:如果一本書需要知道第11章是什么標題,會翻開第11章對應的那一頁嗎?目錄瀏覽一下就好,這個目錄就是起到覆蓋索引的作用。
正例:能夠建立索引的種類分為主鍵索引、唯一索引、普通索引三種,而覆蓋索引只是一種查詢的一種效果,用explain的結果,extra列會出現:using index。
這里提到了覆蓋索引,extra列會出現using index。
extra還有其他比較重要的信息:
using filesort:用到了外部的索引排序,即MySQL無法利用索引完成排序。
using temptory:使用了臨時表。
using where:使用了where過濾。
關于explain中怎么查看執行計劃問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。