資料庫調優教程(四)Explain效能分析命令,調優explain

來源:互聯網
上載者:User

資料庫調優教程(四)Explain效能分析命令,調優explain

上一章我們將了如何發現慢查詢並把語句記錄到日誌中,那麼在發現慢查詢後,要怎樣才能知道語句的問題發生在哪裡。本章將介紹怎樣使用Mysql提供的資料庫效能分析命令,對sql語句進行分析。


二、資料庫效能分析Explain命令


Explain的作用是產生一個QEP(查詢執行計畫),可以協助我們在不真正執行某個sql語句時,就看到mysql怎樣執行,這樣方便我們去分析sql指令的好壞。

執行如下語句

Explain select * from emp where empno = 3333\G

對於返回的資訊,我們主要關心一下幾個

1)    Type

ALL全表掃描,通常是不好的,其他的如index、range、const、ref、system則是較好的

2)    Possible_keys

       可能被用到的索引

3)    Key

       查詢過程中實際使用的索引,當為null時表示沒有使用索引,通常是不好的

4)    key_len

索引欄位最大可能使用的長度,也叫索引基數。索引基數越大,表明可能尋找的行數越多,查詢效率越慢。

5)    Rows

MySQL 估計的需要掃描的行數。只是一個估計。越多表明尋找的行數越多,自然越慢。

6)    Extra

顯示上述資訊之外的其它資訊,非常重要。其主要有一下返回結果。

       Usingindex

表明此查詢使用了覆蓋索引(CoveringIndex),即通過索引就能返回結果,無需訪問表。(覆蓋索引是一種非常優秀的索引,其使用見http://blog.csdn.net/hzy38324/article/details/44857721)

若沒顯示"Usingindex"表示讀取了表資料。

       Usingindex condition

可能會使用索引

       Usingwhere

表示 MySQL 伺服器先讀取整行資料,再檢查此行是否符合 where 句的條件,符合就留下,不符合便丟棄。效率較慢。

       Usingfilesort

表示Mysql會按查詢所需的順序對結果進行排序,這時就會出現 Usingfilesort 。排序自然會增加查詢時間,導致效率變慢。解決方案是利用索引進行排序。若查詢所需的排序與使用的索引的排序一致,因為索引是已排序的,因此按索引的順序讀取結果返回,此時就不會出現Using filesort。

       關於“Using index” 和 “Using index condition”的區別,筆者參考了一下stackoverflow上的一篇文章

http://stackoverflow.com/questions/1687548/mysql-explain-using-index-vs-using-index-condition

裡面是這麼解釋的


簡單的說

Using index就是一定使用索引,這種索引成為覆蓋索引,Using index condition則是在必要的時候才使用索引

怎樣才能讓Usingindex condition變成Using index,答案自然是建立一個覆蓋索引,同樣,筆者將會在之後章節介紹覆蓋索引如何建立。


本章結束,下一章我們將全面講解效能最佳化的利器——索引。


 


相關文章

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.