程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> MySQL執行計劃分析工具EXPLAIN用法詳解

MySQL執行計劃分析工具EXPLAIN用法詳解

編輯:關於PHP編程

MySQL執行計劃分析工具EXPLAIN用法詳解


對於DBA來講熟悉SQL的執行計劃分析技巧對於快速定位數據庫性能問題至關重要,下面簡單介紹一下如何分析MySQL的執行計劃。
一、EXPLAIN用法詳解:EXPLAIN SELECT ……
變體: 1. EXPLAIN EXTENDED SELECT ……將執行計劃“反編譯”成SELECT語句,運行SHOW WARNINGS 可得到被MySQL優化器優化後的查詢語句
 2. EXPLAIN PARTITIONS SELECT ……用於分區表的EXPLAIN
示例如下所示:
 
具體解釋如下1.執行id
包含一組數字,id如果相同,可以認為是一組,從上往下順序執行;在所有組中,id值越大,優先級越高,越先執行2.查詢類型select_type
type顯示的是訪問類型,是較為重要的一個指標,結果值從好到壞依次是:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL ,一般來說,得保證查詢至少達到range級別,最好能達到ref。ALL: 掃描全表index: 掃描全部索引樹range: 掃描部分索引,索引范圍掃描,對索引的掃描開始於某一點,返回匹配值域的行,常見於between、<、>等的查詢ref: 非唯一性索引掃描,返回匹配某個單獨值的所有行。常見於使用非唯一索引即唯一索引的非唯一前綴進行的查找eq_ref:唯一性索引掃描,對於每個索引鍵,表中只有一條記錄與之匹配。常見於主鍵或唯一索引掃描const, system: 當MySQL對查詢某部分進行優化,並轉換為一個常量時,使用這些類型訪問。如將主鍵置於where列表中,MySQL就能將該查詢轉換為一個常量。system是const類型的特例,當查詢的表只有一行的情況下, 使用system。NULL: MySQL在優化過程中分解語句,執行時甚至不用訪問表或索引。
3.possible_keys指出MySQL能使用哪個索引在表中找到行,查詢涉及到的字段上若存在索引,則該索引將被列出,但不一定被查詢使用4.key顯示MySQL在查詢中實際使用的索引,若沒有使用索引,顯示為NULLTIPS:查詢中若使用了覆蓋索引,則該索引僅出現在key列表中5.key_len表示索引中使用的字節數,可通過該列計算查詢中使用的索引的長度6.ref表示上述表的連接匹配條件,即哪些列或常量被用於查找索引列上的值7.rows表示MySQL根據表統計信息及索引選用情況,估算的找到所需的記錄所需要讀取的行數8.Extra包含不適合在其他列中顯示但十分重要的額外信息二、關於MySQL執行計劃的局限總結如下:1.EXPLAIN不會告訴你關於觸發器、存儲過程的信息或用戶自定義函數對查詢的影響情況2.EXPLAIN不考慮各種Cache3.EXPLAIN不能顯示MySQL在執行查詢時所作的優化工作4.部分統計信息是估算的,並非精確值5.EXPALIN只能解釋SELECT操作,其他操作要重寫為SELECT後查看執行計劃 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved