MySQL優化--explain 分析sql語句執行效率

MySQL優化--explain 分析sql語句執行效率sql

explain 命令

explain 命令在解決數據庫性能上市第一推薦使用命令,大部分的性能問題能夠經過此命令來簡單解決,explain能夠用來查看SQL語句的執行效果,能夠幫助選擇更好的索引和優化查詢語句。數據庫

explain 語法: explain select .... from ...[where ....]性能

例如:explain select * from user優化

輸出blog

屬性說明:排序

  1. id:這是select的查詢序列號索引

  2. select_type:select_type就是select的類型,能夠有如下幾種:table

    • SIMPLE:簡單SELECT(不使用UNION或者子查詢等)
    • PRIMARY:最外面的SELECT
    • UNION:UNION中的第二個或後面的SELECT語句
    • DEPENDENT UNION: UNION中的第二個或者後面的SELECT語句,取決於外面的查詢
    • UNION RESULT :UNION的結果
    • SUBQUERY:子查詢中的第一個SELECT
    • DEPENDENT SUBQUERY: 子查詢中的第一個SELECT,取決於外面的查詢
    • DERIVED: 導出表的SELECT(from子句的子查詢)
  3. table 顯示這一行的數據是關於哪張表的效率

  4. type:這列是最重要的,顯示了鏈接使用了那些類別,有無使用索引,是使用EXPLAIN命令風險性能瓶頸的關鍵項之一,類型以下file

    ALL,index,range,ref ,eq_ref,const,system,NULL

    從最好到最差依次是:

    system > const >eq_ref >ref >range >index >all

    通常來講,得保證查詢至少達到range級別,最好能達到ref

    • system 表只有一行記錄(等於系統表),這是const類型的特例,平時不會出現,這個能夠忽略不計。

    • const 表示經過索引一次就能找到了。const用於標記哦啊primary key 或者unique索引,由於只匹配一行數據,因此很快。如將主鍵置於where列表中

    • eq_ref 惟一性索引掃描,對於每個索引鍵,表中只有一條記錄與之匹配。常見於主鍵或惟一索引掃描

    • ref非惟一索引掃描,返回匹配某個單獨值的全部行,本質上也是一種索引訪問,它返回全部匹配某個單獨值的行,然而,它可能會找到多個符合條件的行,因此他屬於查找和掃描的混合體

    • range 只索引給定範圍的行,使用一個索引來選擇行,key列顯示使用了那個索引,通常就是在你的where語句出現between,<,>,in 等語句,這種範圍掃描索引比全表掃描要好,由於它只須要開始於索引某一點 ,而結束於另外一點,不用掃描所有索引。

    • index FULL Index Scan,Index與ALL區別爲index類型只遍歷索引樹,這一般比ALL快,由於索引文件一般比數據文件小。(也就是說ALL和index 都是讀全表,可是index是從索引中讀取的,而all是從硬盤讀取的)

    • ALL Full Table Scan 將遍歷全表以找到匹配的行

  5. possible_keys和key

    • possible_keys 顯示可能應用在這張表中的索引,一個或多個。查詢涉及到的字段上若存在索引,則該索引將被列出,但不必定被查詢結果實際使用

    • key 表示存在的索引的值

      實際使用的索引,若是爲NULL,這沒有使用索引。(可能緣由包括沒有創建索引貨索引失效)

      查詢中若使用了覆蓋索引(select後要查詢的字段恰好和建立的索引字段徹底相同),則該索引僅出如今key列表中

  6. key_len

    表示索引中使用的字節數,可經過該列計算查詢中使用的索引的長度,在不損失精確性的狀況下,長度越小越好。key_len顯示的值爲索引字段中最大可能長度,並不是實際使用長度。即key_len是根據表定義計算而得,不是經過表內檢索出的。

  7. ref

    顯示索引那一列被使用了,若是可能的話,最好是一個常數。那些列或常量被用於查找索引列上的值

  8. rows

    根據表統計信息及索引選用狀況,大體估算出找到所需的記錄所須要讀取的行數,也就是說,用的越少越好

  9. Extra

    包含不適合在其餘列中顯式可是十分重要的額外信息

  • Using filesort

    說明MySQL 會對數據使用一個外部的索引排序,而不是按照表內的索引順序進行讀取。MySQL 中沒法利用索引完成的排序操做稱爲「文件排序」

  • Using temporary

    使用了臨時表保存中間結果,MySQL在對查詢結果排序時使用臨時表,常見於排序order by 和分組查詢group by

  • Using index

    表示了使用了 索引

  • Using where

    表示使用了where

相關文章
相關標籤/搜索