您好,登錄后才能下訂單哦!
這篇文章主要介紹“MySQL explain中列的取值方法及含義是什么”,在日常操作中,相信很多人在MySQL explain中列的取值方法及含義是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”MySQL explain中列的取值方法及含義是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
type
type 取值 | 含義 |
---|---|
const | 使用主鍵 或 唯一二級索引 |
eq_ref | 被驅動表,用主鍵 或 唯一二級索引進行 (索引列不為空) |
ref | 普通 的二級索引進行等值匹配 (索引列不為空) |
ref_or_null | 普通 的二級索引進行等值匹配 (索引可以為空) |
index_merge | TODO 索引合并相關的內容待探索 |
unique_subquery | 查詢優化器把 in 語句優化成 exists,使用了主鍵 或 唯一二級索引進行 (索引列不為空) |
index_subquery | 查詢優化器把 in 語句優化成 exists,使用了普通索引 |
range | 范圍掃描 |
index | 1. 使用索引覆蓋, 但是要掃描全部的索引記錄 where條件只命中部分索引 2. 全表掃描, 并且要對主鍵進行排序 |
all | 全表掃描 |
表示等值匹配用的是什么
ref 取值 | 含義 | 相關列 |
---|---|---|
const | 與key列的索引名等值匹配 | key |
表的列名 | 與該列進行等值匹配 | |
func | 函數 |
預計掃描的行數
是一個百分比數,key1 掃描的數作為分母, common_field 命中的結果為分子
select * from s1 where key1 > 'z' and common_field = 'a'
表關聯的時候,這個指標比較重要,針對下表數據
table | rows | filtered |
---|---|---|
s1 | 9688 | 10 |
s2 | 1 | 100 |
extra 取值 | 含義 |
---|---|
Using index | 使用了索引覆蓋 |
Using index condition | 使用了索引下推 |
Using where | 在 server 層進行了判斷(沒有索引的列) |
Using join buffer (Block Nested Loop) | 不能有效利用索引時,退而求其次使用緩存 |
Using filesort | 使用內存或者磁盤進行文件排序 |
Using temporary | 使用了臨時表 |
client -> server -> 存儲引擎,下推的意思是把篩選放到存儲引擎,減少回表的數據量
形如 where key1 > xxx and key3 like ‘%a’ ,5.6 版本 like 的操作是在server層處理的,5.7.x的版本后可以在存儲引擎層完成過濾。
select common_field, count(*) as amount from s1 group by common_field; -- 以上語句會被 mysql 補充為 select common_field, count(*) as amount from s1 group by common_field order by common_field; -- 如果要省略文件排序, 則顯式聲明為 order by null select common_field, count(*) as amount from s1 group by common_field order by null;
到此,關于“MySQL explain中列的取值方法及含義是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。