Explain SQL語句效能分析命令

2021-09-19 20:41:10 字數 1184 閱讀 8604

原文

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),即通過索引就能返回結果,無需訪問表。(覆蓋索引是一種非常優秀的索引,其使用見

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

usingindex condition

可能會使用索引

usingwhere

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

usingfilesort

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

裡面是這麼解釋的

簡單的說

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

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

mysql 語句 效能 mysql語句效能分析

id id列數字越大越先執行,id列為null的就表是這是乙個結果集 select type 表示不需要union操作或者不包含子查詢的簡單select查詢。有連線查詢時,外層的查詢為 且只有乙個 primary 乙個需要union操作或者含有子查詢的select,位於最外層的單位查詢的select...

測試mysql語句效能 SQL語句效能測試

隨著軟體系統的複雜度提高,軟體系統的效能瓶頸可能出現的地方有很多,可能是 也可能是應用伺服器,可能是前端介面層,也可能是中介軟體,還有,可能是資料庫。而對於資料庫出現瓶頸而言,又要分兩種情況,一種是資料庫架構 設計有問題 另外一種則是提交處理的sql語句有問題。據統計,在資料庫應用系統中,大部分的效...

valgrind callgrind效能分析

1.請自行安裝valgrind工具 2.使用工具執行你的應用程式 valgrind tool callgrind sgzj socialserver 3.執行結束後,程式當前目錄生成了乙個檔案callgrind.out.58237 4.python gprof2dot.py f callgrind ...