上一章我們將了如何發現慢查詢並把語句記錄到日誌中,那麼在發現慢查詢後,要怎樣才能知道語句的問題發生在**。本章將介紹怎樣使用mysql提供的資料庫效能分析命令,對sql語句進行分析。
二、資料庫效能分析explain命令
explain的作用是生成乙個qep(查詢執行計畫),可以幫助我們在不真正執行某個sql語句時,就看到mysql怎樣執行,這樣方便我們去分析sql指令的好壞。
執行如下語句
對於返回的資訊,我們主要關心一下幾個
1) type
all全表掃瞄,通常是不好的,其他的如index、range、const、ref、system則是較好的
2) possible_keys
可能被用到的索引
3) key
查詢過程中實際使用的索引,當為null時表示沒有使用索引,通常是不好的
4) key_len
索引字段最大可能使用的長度,也叫索引基數。索引基數越大,表明可能查詢的行數越多,查詢效率越慢。
5) rows
mysql 估計的需要掃瞄的行數。只是乙個估計。越多表明查詢的行數越多,自然越慢。
6) extra
顯示上述資訊之外的其它資訊,非常重要。其主要有一下返回結果。
usingindex
表明此查詢使用了覆蓋索引(coveringindex),即通過索引就能返回結果,無需訪問表。(覆蓋索引是一種非常優秀的索引,其使用見
若沒顯示"usingindex"表示讀取了表資料。
usingindex condition
可能會使用索引
usingwhere
表示 mysql 伺服器先讀取整行資料,再檢查此行是否符合 where 句的條件,符合就留下,不符合便丟棄。效率較慢。
usingfilesort
表示mysql會按查詢所需的順序對結果進行排序,這時就會出現 usingfilesort 。排序自然會增加查詢時間,導致效率變慢。解決方法是利用索引進行排序。若查詢所需的排序與使用的索引的排序一致,因為索引是已排序的,因此按索引的順序讀取結果返回,此時就不會出現using filesort。
裡面是這麼解釋的
簡單的說
using index就是一定使用索引,這種索引成為覆蓋索引,using index condition則是在必要的時候才使用索引
怎樣才能讓usingindex condition變成using index,答案自然是建立乙個覆蓋索引,同樣,筆者將會在之後章節介紹覆蓋索引如何建立。
本章結束,下一章我們將全面講解效能優化的利器——索引。
資料庫調優教程(四)Explain效能分析命令
上一章我們將了如何發現慢查詢並把語句記錄到日誌中,那麼在發現慢查詢後,要怎樣才能知道語句的問題發生在 本章將介紹怎樣使用mysql提供的資料庫效能分析命令,對sql語句進行分析。二 資料庫效能分析explain命令 explain的作用是生成乙個qep 查詢執行計畫 可以幫助我們在不真正執行某個sq...
資料庫調優
1 資料庫調優 計算機硬體調優 資料庫物件的放置策略 利用資料庫分割槽技術,均勻地把資料分布在系統的磁碟中,平衡i o 訪問,避免i o 瓶 頸 使用磁碟硬體優化資料庫 基本表設計優化 第三正規化的基本特徵 是非主鍵屬性只依賴於主鍵屬性。優點 一是能消除 冗餘資料 節省磁碟儲存空間 二是有良好的資料...
資料庫調優
檢視資料庫連線個數 show global variables like max connections 資料庫連線不上可能是max connections數太少了 增加連線數 配置檔案 etc my.cnf.d server.cnf mysqld mysqld max connections 10...