mysql explain extra理解

2022-09-23 07:56:59 字數 1274 閱讀 8729

extra表示附加資訊,常見的有如下幾種(也按查詢效率從高到低排列):

表示使用索引,如果只有 using index,說明他沒有查詢到資料表,只用索引表就完成了這個查詢,這個叫覆蓋索引。如果同時出現using where,代表使用索引來查詢讀取記錄, 也是可以用到索引的,但是需要查詢到資料表。

查詢使用了索引,但是需要的資料都在索引列中能找到,所以不需要回表查詢資料

在5.6版本後加入的新特性(index condition pushdown),會先條件過濾索引,過濾完索引後找到所有符合索引條件的資料行,隨後用 where 子句中的其他條件去過濾這些資料行,也就是說需要回表查詢

表示優化器需要通過索引回表查詢資料  

using filesort表示在索引之外,需要額外進行外部的排序動作。導致該問題的原因一般和order by有者直接關係,一般可以通過合適的索引來減少或者避免。

explain select

*from table_item where

user_id=2

order

by item_id limit 0, 5

user_id 和 item_id 分別建立一個索引,對此語句mysql選擇了 user_id索引,那麼 item_id 的索引沒有起到任何用處。當排序時記錄數較多,記憶體中的排序 buffer滿了,只能 using filesort 進行外部排序。

解決方式為對這兩列建立組合索引。

explain select

*from table_item where

user_id=2

anduser_age >

20 order

by item_id limit 0, 5

建立組合索引(user_id, user_age, item_id),看似非常完美。但由於user_age規則不是確定值,使用該組合索引的話實際上需要先按索引找出一個個user_age下的東西后再對其進行排序,仍然會filesort。

解決方式是使用組合索引(user_id, item_id),對排序好的item_id再過濾到不滿足user_age > 20的條目,不會出現filesort。

explain select

*from table_item where

user_id=2

order

by item_attr desc, item_id limit 0, 5

表示為了得到結果,使用了臨時表,這通常是出現在多表聯合查詢,結果排序的場合。

Mysql之explain調優

使用explain語法,對sql進行解釋,根據其結果進行調優 a explain 結果中,第一行出現的表就是驅動表 b 對驅動表可以直接排序,對非驅動表 的欄位排序 需要對迴圈查詢的合併結果 臨時表 進行排序 important ,即using temporary c 驅動表 的定義為 1 指定了聯...

mysql中explain的用法

最近在做效能測試中經常遇到一些資料庫的問題,通常使用慢查詢日誌可以找到執行效果比較差的sql,但是僅僅找到這些sql是不行的,我們需要協助開發人員分析問題所在,這就經常用到explain explain顯示了mysql如何使用索引來處理select語句以及連線表。可以幫助選擇更好的索引和寫出更優化的...

mysql explain的解釋

詳解mysql中explain解釋命令 explain顯示了mysql如何使用索引來處理select語句以及連線表。可以幫助選擇更好的索引和寫出更優化的查詢語句。 使用方法,在select語句前加上explain就可以了 如 explain select surname first name for...