效能分析 explain

2021-10-19 23:21:07 字數 2894 閱讀 5171

1. id:查詢中select子句或操作表的順序

id相同,執行順序由上到下

id不同,越大優先順序越高

2. select_type:查詢型別,主要區別於普通查詢、聯合查詢、子查詢、複雜查詢

******:簡單的查詢

pimary:查詢中包含任何複雜的子部分,最外層標記為primary

derived:在from中包含的子查詢被標記為derived(衍生)

subquery:在select或where中包含的子查詢

union:第二個select出現在union之後

union result:從union表獲取結果的select

3. table:關於哪張表

4. type:查詢使用了哪種型別

system>const>eq_ref>ref>fulltext>ref_or_null>index_merge>_unique_subquery>_index_subquery>range>index>all

system:表只有一行記錄

const:通過索引一次就找到

eq_ref:唯一索引掃瞄,表只有一條記錄與之匹配

ref:非唯一索引,匹配某個單獨值,返回匹配所有行

range:只檢索給定範圍的行,使用乙個索引來選擇

index:遍歷索引樹

all:遍歷全表

5. possible_keys:顯示可能應用在這張表的索引

6. key :實際使用的索引

7. key_len:索引中使用的位元組數

8. ref:索引那一列被使用

9. row:執行查詢時必須檢索的行數

10. extra:額外資訊

1.using filesort:說明mysql會對資料使用乙個外部的索引排序,而不是按照表內的索引順序進行讀取。

mysql中無法利用索引完成的排序操作稱為「檔案排序」

出現filesort的情況:orderby 的時候使用了復合索引中的部分索引,導致生成臨時表,和檔案排序

優化後,不再出現filesort的情況:orderby使用了復合索引

查詢中排序的字段,排序欄位若通過索引去訪問將大大提高排序速度分情況:當通過前面的查詢語句 篩選大部分條件後,只剩下很少的資料。using filesort 效能影響不大。需要綜合考慮

2.using temporary :使了用臨時表儲存中間結果,mysql在對查詢結果排序時使用臨時表。常見於排序 order by 和分組查詢 group by。

優化前:group by 的時候使用了復合索引中的部分索引,導致生成臨時表,和檔案排序

優化後:

3.using index:表示相應的select操作中使用了覆蓋索引(covering index),避免訪問了表的資料行,效率不錯!如果同時出現using where,表明索引被用來執行索引鍵值的查詢;如果沒有同時出現using where,表明索引只是用來讀取資料而非利用索引執行查詢。

覆蓋索引:也叫索引覆蓋

索引是高效找到行的乙個方法,但是一般資料庫也能使用索引找到乙個列的資料,因此它不必讀取整個行。畢竟索引葉子節點儲存了它們索引的資料;當能通過讀取索引就可以得到想要的資料,那就不需要讀取行了。

selectid , namefrom t_*** whereage=18;

有乙個組合索引idx_id_name_age_***包含了(覆蓋了),id,name,age三個字段。查詢時直接將建立了索引的列讀取出來了,而不需要去查詢所在行的其他資料。所以很高效。

(個人認為:在資料量較大,固定字段查詢情況多時可以使用這種方法。)

注意:如果要使用覆蓋索引,一定要注意select列表中只取出需要的列,不可select *,因為如果將所有字段一起做索引會導致索引檔案過大,查詢效能下降。

4.using where:表明使用了where過濾

5.using join buffer:使用了連線快取:

出現在當兩個連線時,驅動表(被連線的表,left join 左邊的表。inner join 中資料少的表) 沒有索引的情況下。給驅動表建立索引可解決此問題。且 type 將改變成 ref

6.impossible where:where子句的值總是false,不能用來獲取任何元組

例如:select * from test where name='haha' and name ='heihei'; where條件不能name等於兩個值

7.select tables optimized away:在沒有groupby子句的情況下,基於索引優化min/max操作或者對於myisam儲存引擎優化count(*)操作,不必等到執行階段再進行計算,查詢執行計畫生成的階段即完成優化。

Mysql效能分析 Explain

一.explain是什麼 使用explain關鍵字可以模擬優化器執行sql查詢語句,從而知道mysql是 如何處理你的sql語句的。分析你的查詢語句或是表結構的效能瓶頸 二.explain作用 1 表的讀取順序 2 哪些索引可以使用 3 資料讀取操作的操作型別 4 哪些索引被實際使用 5 表之間的引...

MySQL效能分析及explain

mysql效能分析及explain用法的知識 1.使用explain語句去檢視分析結果 如explain select from test1 where id 1 會出現 id selecttype table type possible keys key key len ref rows extr...

MySQL效能分析及explain

mysql效能分析及explain用法的知識是本文我們主要要介紹的內容,接下來就讓我們通過一些實際的例子來介紹這一過程,希望能夠對您有所幫助。1.使用explain語句去檢視分析結果 如explain select from test1 where id 1 會出現 id selecttype ta...