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