慢查詢

zhegeMaw發表於2024-08-20

分析SQL查詢語句的執行情況,只能解釋select操作。

常用欄位
  • select_type——查詢中每個select子句的型別

    • SIMPLE:表示簡單查詢(不使用聯合查詢或子查詢)

    • PRIMARY:如果包含關聯查詢或自查詢,則表示最外層的查詢語句;

    • UNION:表示聯合查詢的第2個或後面的查詢語句;

  • type——查詢型別,指明瞭MySQL在表中找到所需行的方式 ALL, index, range, ref, eq_ref, const, system, NULL(從左到右,效能從差到好)

    • ALL:全表掃描

    • index: 全索引掃描,即掃描全部的索引

    • range:範圍掃描,利用索引選擇待查詢行

    • ref: 一種索引訪問,也稱索引查詢,它返回所有匹配某個單個值的行。

    • eq_ref: 使用這種索引查詢,最多隻返回一條符合條件的記錄。在使用唯一性索引或主鍵查詢時會出現該值,非常高效。

    • const:基於主鍵或唯一索引查詢,最多返回一條結果

    • system: 是const型別的特例,當查詢物件表只有一行資料,使用system。

    • NULL: 在執行階段不需要訪問表。

  • possible_keys——可能使用的索引

  • key——實際使用的索引

  • key_len——使用的索引的長度。在不損失精確性的情況下,長度越短越好

  • ref——哪些欄位或者常量被用來和key配合從表中查詢記錄

  • rows——mysql認為必須檢查的用來返回請求資料的行數,是估算的行數

  • extra——其他資訊

    • Using index:使用覆蓋索引,表示查詢索引就可查到所需資料,不用掃描表資料檔案,往往說明效能不錯。

    • Using Where:在儲存引擎檢索行後再進行過濾,使用了where從句來限制哪些行將與下一張表匹配或者是返回給使用者。

    • Using temporary:在查詢結果排序時會使用一個臨時表,一般出現於排序、分組和多表 join 的情況,查詢效率不高,建議最佳化。

    • Using filesort:對結果使用一個外部索引排序,而不是按索引次序從表裡讀取行,一般有出現該值,都建議最佳化去掉,因為這樣的查詢 CPU 資源消耗大。

參考:https://zhuanlan.zhihu.com/p/51771446

相關文章