MySQL高階(3)-效能分析Explain

pangqiandou發表於2018-12-01

1、使用Explain關鍵字可以模擬優化器執行SQL查詢語句,從而知道MySQL是如何處理你的SQL語句的。分析你的查詢語句或是表結構的效能瓶頸 。

2、執行方法:Explain + SQL語句

  

  解釋:

  ①id:

    select查詢的序列號,包含一組數字,表示查詢中執行select子句或操作表的順序。

    三種情況:

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

      

     id不同,如果是子查詢,id的序號會遞增,id值越大優先順序越高,越先被執行

      

      id相同不同,同時存在

      

  ②select_type

     常見和常用的值有6種

     

    查詢的型別用於區分 普通查詢、聯合查詢、子查詢等的複雜查詢。

    SIMPLE:

        簡單的select查詢,查詢中不包含子查詢或者UNION。

    PRIMARY:

        查詢中若包含任何複雜的子部分,最外層查詢則被標記為PRIMARY

    SUBQUERY:

        在SELECT或WHERE列表中包含了子查詢。

    DERIVED:

        在FROM列表中包含的子查詢被標記為DERIVED(衍生),MySQL會遞迴執行這些子查詢,把結果放在臨時表裡。

    UNION:若第二個SELECT出現在UNION之後,則被標記為UNION,若UNION包含在FROM子句的子查詢中,外層SELECT將被標記為:DERIVED

    UNION RESULT 從UNION表獲取結果的SELECT。

   ③type:取值為下面8種

    

    type顯示的是訪問型別,是較為重要的指標,結果值從最好到最壞依次是:

    system>const>eq_ref>ref>fulltext>ref_or_null>index_merge>unique_subquery>index_subquery>range>index>ALL。

    工作中常見的有:

    system >const >eq_ref >ref> rang>index> all

    一般來說,得保證查詢至少達到range級別,最好能達到ref。

    

        

  ④possible_keys 和 key

    possible_keys:

    

    keys:

    

  ⑤key_len

    

  ⑥ref

    

  ⑦rows

    

    

  ⑧Extra

    

    

        

     

 

        

    應避免出現Using Filesort(檔案排序)和using temporary(臨時表) 這樣會導致效能下降,排序應使用和索引一致順序和列。

 

     

         

 

       

3、能幹嘛

  表的讀取順序

  資料讀取操作的操作型別

  哪些索引可以使用

  哪些索引被實際使用

  表之間的引用

  每張表有多少行被優化器查詢

4、JOIN語句優化

  

 

相關文章