mysql開啓分析定位慢查詢

捕捉mysql性能問題最經常使用的就是打開慢查詢,定位查詢效率低下的sql語句.mysql

編輯/etc/my.inisql

slow_query_log 慢查詢開啓狀態
slow_query_log_file 慢查詢日誌存放的位置(這個目錄須要MySQL的運行賬號的可寫權限,通常設置爲MySQL的數據存放目錄)
long_query_time 查詢超過多少秒才記錄

打開剛設置好路徑下的日誌文件,查看效率低的SQL語句服務器

EXPLAIN命令是查看優化器如何決定執行查詢的主要方法:性能

1.id:包含一組數字,表示查詢中執行select子句或操做表的順序優化

  id相同,執行順序由上至下
spa

  若是是子查詢,id的序號會遞增,id值越大優先級越高,越先被執行日誌

  id若是相同,能夠認爲是一組,從上往下順序執行;在全部組中,id值越大,優先級越高,越先執行code

2.select_type:查詢語句複雜成功blog

  SIMPLE:查詢中不包含子查詢或者UNION排序

  查詢中若包含任何複雜的子部分,最外層查詢則被標記爲:PRIMARY(主查詢)

  在SELECT或WHERE列表中包含了子查詢,該子查詢被標記爲:SUBQUERY

  在FROM列表中包含的子查詢被標記爲:DERIVED(衍生)用來表示包含在from子句中的子查詢的select,mysql會遞歸執行並將結果放到一個臨時表中。服務器內部稱爲"派生表",由於該臨時表是從子查詢中派生出來的

   若第二個SELECT出如今UNION以後,則被標記爲UNION;若UNION包含在FROM子句的子查詢中,外層SELECT將被標記爲:DERIVED

3.type:訪問類型

  ALL(全盤掃描), index(只遍歷索引樹),  range(範圍掃描,in,between), ref, eq_ref, const(索引查找), system, NULL

  從左到右,性能從最差到最好

4. possible_keys
  指出MySQL能使用哪一個索引在表中找到記錄,查詢涉及到的字段上若存在索引,則該索引將被列出,但不必定被查詢使用

5. key
  顯示MySQL在查詢中實際使用的索引,若沒有使用索引,顯示爲NULL

7. ref
  表示上述表的鏈接匹配條件,即哪些列或常量被用於查找索引列上的值

8. rows
  表示MySQL根據表統計信息及索引選用狀況,估算的找到所需的記錄所需
要讀取的行數

9.Extra

  Using index該值表示相應的select操做中使用了覆蓋索引(Covering Index)  

  Using where表示mysql服務器將在存儲引擎檢索行後再進行過濾

  Using temporary表示MySQL須要使用臨時表來存儲結果集,常見於排序和分組查詢

  Using join buffer改值強調了在獲取鏈接條件時沒有使用索引,而且須要鏈接緩衝區來存儲中間結果。若是出現了這個值,那應該注意,根據查詢的具體狀況可能須要添加索引來改進能。

  Impossible where這個值強調了where語句會致使沒有符合條件的行

相關文章
相關標籤/搜索