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

2021-12-30 00:06:48 字數 1667 閱讀 1060

上一章我們將了如何發現慢查詢並把語句記錄到日誌中,那麼在發現慢查詢後,要怎樣才能知道語句的問題發生在**。本章將介紹怎樣使用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」的區別,筆者參考了一下stackoverflow上的一篇文章

裡面是這麼解釋的

簡單的說

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...