MySQL explain 中列的取值及含義講解
前言
今天看 《MySQL 是怎樣允許的》和 《高性能MySQL》索引相關(guān)的部分,覺(jué)得有必要整理下 explain 中列的取值及含義。以后工作的時(shí)候翻閱查找更快。
type
type 取值 | 含義 |
---|---|
const | 使用主鍵 或 唯一二級(jí)索引 |
eq_ref | 被驅(qū)動(dòng)表,用主鍵 或 唯一二級(jí)索引進(jìn)行 (索引列不為空) |
ref | 普通 的二級(jí)索引進(jìn)行等值匹配 (索引列不為空) |
ref_or_null | 普通 的二級(jí)索引進(jìn)行等值匹配 (索引可以為空) |
index_merge | TODO 索引合并相關(guān)的內(nèi)容待探索 |
unique_subquery | 查詢(xún)優(yōu)化器把 in 語(yǔ)句優(yōu)化成 exists,使用了主鍵 或 唯一二級(jí)索引進(jìn)行 (索引列不為空) |
index_subquery | 查詢(xún)優(yōu)化器把 in 語(yǔ)句優(yōu)化成 exists,使用了普通索引 |
range | 范圍掃描 |
index | 1. 使用索引覆蓋, 但是要掃描全部的索引記錄 where條件只命中部分索引 2. 全表掃描, 并且要對(duì)主鍵進(jìn)行排序 |
all | 全表掃描 |
ref
表示等值匹配用的是什么
ref 取值 | 含義 | 相關(guān)列 |
---|---|---|
const | 與key列的索引名等值匹配 | key |
表的列名 | 與該列進(jìn)行等值匹配 | |
func | 函數(shù) |
rows
預(yù)計(jì)掃描的行數(shù)
filtered
是一個(gè)百分比數(shù),key1 掃描的數(shù)作為分母, common_field 命中的結(jié)果為分子
select * from s1 where key1 > 'z' and common_field = 'a'
表關(guān)聯(lián)的時(shí)候,這個(gè)指標(biāo)比較重要,針對(duì)下表數(shù)據(jù)
table | rows | filtered |
---|---|---|
s1 | 9688 | 10 |
s2 | 1 | 100 |
extra
extra 取值 | 含義 |
---|---|
Using index | 使用了索引覆蓋 |
Using index condition | 使用了索引下推 |
Using where | 在 server 層進(jìn)行了判斷(沒(méi)有索引的列) |
Using join buffer (Block Nested Loop) | 不能有效利用索引時(shí),退而求其次使用緩存 |
Using filesort | 使用內(nèi)存或者磁盤(pán)進(jìn)行文件排序 |
Using temporary | 使用了臨時(shí)表 |
補(bǔ)充: 簡(jiǎn)單闡述索引下推
client -> server -> 存儲(chǔ)引擎,下推的意思是把篩選放到存儲(chǔ)引擎,減少回表的數(shù)據(jù)量
形如 where key1 > xxx and key3 like ‘%a’ ,5.6 版本 like 的操作是在server層處理的,5.7.x的版本后可以在存儲(chǔ)引擎層完成過(guò)濾。
補(bǔ)充:group by 優(yōu)化掉額外的排序操作
select common_field, count(*) as amount from s1 group by common_field; -- 以上語(yǔ)句會(huì)被 mysql 補(bǔ)充為 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;
后記
TODO: 用 otpimzer trace 查詢(xún)優(yōu)化器的具體工作過(guò)程
到此這篇關(guān)于MySQL explain 中列的取值及含義的文章就介紹到這了,更多相關(guān)MySQL explain列的取值及含義內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
windows 64位下mysql 8.0.13 安裝配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了windows 64位下mysql 8.0.13 安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11MySQL開(kāi)啟記錄執(zhí)行過(guò)的SQL語(yǔ)句方法
這篇文章主要介紹了MySQL開(kāi)啟記錄執(zhí)行過(guò)的SQL語(yǔ)句方法,配置的方法很簡(jiǎn)單,本文直接給出配置示例,需要的朋友可以參考下2015-07-07MySQL安裝starting?the?server失敗的2種解決辦法(推薦!)
MySQL是一個(gè)非常強(qiáng)大的關(guān)系型數(shù)據(jù)庫(kù),但有些初學(xué)者在安裝配置的時(shí)候,遇到種種的困難,下面這篇文章主要給大家介紹了關(guān)于MySQL安裝starting?the?server失敗的2種解決辦法,需要的朋友可以參考下2023-04-04

利用mysql的inet_aton()和inet_ntoa()函數(shù)存儲(chǔ)IP地址的方法分享

MySQL之復(fù)雜查詢(xún)的實(shí)現(xiàn)