MySQL explain執行計畫最佳化

來源:互聯網
上載者:User

MySQL explain執行計畫最佳化
explain執行計畫

簡介MySQL調優:

  1. 先發現問題(慢查詢,profile)
  2. 對於使用索引和沒有使用索引,瞭解到索引可以快速去尋找資料
  3. 瞭解什麼是索引(索引是排好序的快速尋找的資料結構)
  4. 索引的管理(查看,建立,刪除)
  5. 索引的本身的資料結構(B-TREE結構和聚簇結構)
  6. MySQL是如何去使用這些索引的(explain工具),需要去發現索引是否合理的被使用,防止索引濫用。

     

    注意:索引對查詢是有協助的,但是對更新是沒有好處的。索引要建立的合理。

     

    MySQL調優的一個通用思路(面試題):通過上面的步驟就可以對MySQL進行調優,只要將上面的步驟重複不斷執行,可以使用MySQL在最優的情況下工作。

     

    profile定義:MySQL提供的一個可以分析SQL語句執行過程的工具,通過它大致可以瞭解到MySQL將如何執行使用者傳遞過來的sql語句。

    用法

     

    使用的時候只要在對應的sql語句前面,加上關鍵字explain 或者同義字 desc

    # desc select * from tableName where id = 1000000;

    # explain select * from tableName where id = 1000000;

    以上兩條sql執行效果是等價的。

     

    可以先簡單對比 有索引 和 無索引 執行計畫:

    no_index無索引的情況下分析:

     

    rows: 代表查詢滿足該sql語句的結果,可能需要查詢行的數量。

     

    id存在主鍵索引的情況下分析:

     

    type:重點分析

     

  7. all 代表全表掃描,一般在不使用索引的情況下回出現該值

    全表掃描:一行一行的逐行比較,然後返回滿足條件的記錄。

     

  8. const,代表使用了主鍵索引。 開發之中,盡量出現這個。常量尋找

     

    3. range代表範圍操作,當執行的sql語句是一個範圍尋找的時候,也可以使用索引。

    range含義解釋:由於索引是排好序的結構。沿著這個有序的結構,再去截取一段有序的資料,是可以利用上索引的。

     

     

    面試題:什麼樣的欄位適合建立索引?(建立索引的時候有什麼考慮?)

    答:

  9. 在where條件後面作為查詢的欄位需要建立索引。
  10. 在(排序order 範圍range 分組group)這些情況下也是可以使用索引的,所以在排序欄位後面加上索引也是可以的。

    注意:在where條件後也不是所有的欄位都建立索引,因為索引本身也是有開銷的。

     

  11. index代表使用了索引

    當做記錄統計的時候,可以直接使用索引返回記錄的行數,就沒必要去對磁碟檔案的行數做統計。

     

  12. system,當表中的記錄只有一行的時候,MySQL認為可以直接的返回記錄資訊,而不必要使用索引檔案。一般出現在一行記錄(自己建立的表)或者系統層級的表(mysql.user)一般MySQL在啟動的時候,會將部分的系統層級的表優先載入到記憶體做一個緩衝。

     

  13. null,可能出現,如果出現這個,也代表很好。基本不容易出現。

    總結:null 》system》const》range》index》all

    注意:盡量不要出現all

本文永久更新連結地址:

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.