MySQL explain 中列的取值及含義講解
前言
今天看 《MySQL 是怎樣允許的》和 《高性能MySQL》索引相關(guān)的部分,覺得有必要整理下 explain 中列的取值及含義。以后工作的時候翻閱查找更快。
type
| type 取值 | 含義 |
|---|---|
| const | 使用主鍵 或 唯一二級索引 |
| eq_ref | 被驅(qū)動表,用主鍵 或 唯一二級索引進行 (索引列不為空) |
| ref | 普通 的二級索引進行等值匹配 (索引列不為空) |
| ref_or_null | 普通 的二級索引進行等值匹配 (索引可以為空) |
| index_merge | TODO 索引合并相關(guān)的內(nèi)容待探索 |
| unique_subquery | 查詢優(yōu)化器把 in 語句優(yōu)化成 exists,使用了主鍵 或 唯一二級索引進行 (索引列不為空) |
| index_subquery | 查詢優(yōu)化器把 in 語句優(yōu)化成 exists,使用了普通索引 |
| range | 范圍掃描 |
| index | 1. 使用索引覆蓋, 但是要掃描全部的索引記錄 where條件只命中部分索引 2. 全表掃描, 并且要對主鍵進行排序 |
| all | 全表掃描 |
ref
表示等值匹配用的是什么
| ref 取值 | 含義 | 相關(guān)列 |
|---|---|---|
| const | 與key列的索引名等值匹配 | key |
| 表的列名 | 與該列進行等值匹配 | |
| func | 函數(shù) |
rows
預計掃描的行數(shù)
filtered
是一個百分比數(shù),key1 掃描的數(shù)作為分母, common_field 命中的結(jié)果為分子
select * from s1 where key1 > 'z' and common_field = 'a'
表關(guān)聯(lián)的時候,這個指標比較重要,針對下表數(shù)據(jù)
| table | rows | filtered |
|---|---|---|
| s1 | 9688 | 10 |
| s2 | 1 | 100 |
extra
| extra 取值 | 含義 |
|---|---|
| Using index | 使用了索引覆蓋 |
| Using index condition | 使用了索引下推 |
| Using where | 在 server 層進行了判斷(沒有索引的列) |
| Using join buffer (Block Nested Loop) | 不能有效利用索引時,退而求其次使用緩存 |
| Using filesort | 使用內(nèi)存或者磁盤進行文件排序 |
| Using temporary | 使用了臨時表 |
補充: 簡單闡述索引下推
client -> server -> 存儲引擎,下推的意思是把篩選放到存儲引擎,減少回表的數(shù)據(jù)量
形如 where key1 > xxx and key3 like ‘%a’ ,5.6 版本 like 的操作是在server層處理的,5.7.x的版本后可以在存儲引擎層完成過濾。
補充:group by 優(yōu)化掉額外的排序操作
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;
后記
TODO: 用 otpimzer trace 查詢優(yōu)化器的具體工作過程
到此這篇關(guān)于MySQL explain 中列的取值及含義的文章就介紹到這了,更多相關(guān)MySQL explain列的取值及含義內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL之DATE_ADD()和DATE_SUB()函數(shù)的使用方式
這篇文章主要介紹了MySQL之DATE_ADD()和DATE_SUB()函數(shù)的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04
詳解Ubuntu Server下啟動/停止/重啟MySQL數(shù)據(jù)庫的三種方式
本篇文章主要介紹了buntu Server下啟動/停止/重啟MySQL數(shù)據(jù)庫的三種方式,具有一定的參考價值,有興趣的可以了解一下。2017-01-01
Mysql+Keepalived實現(xiàn)雙主熱備方式
這篇文章主要介紹了Mysql+Keepalived實現(xiàn)雙主熱備方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10
使用SKIP-GRANT-TABLES 解決 MYSQL ROOT密碼丟失
這篇文章主要介紹了使用SKIP-GRANT-TABLES 解決 MYSQL ROOT密碼丟失的相關(guān)資料,需要的朋友可以參考下2015-09-09
LEFT JOIN關(guān)聯(lián)表中ON,WHERE后面跟條件的區(qū)別
本文主要介紹了LEFT JOIN關(guān)聯(lián)表中ON,WHERE后面跟條件的區(qū)別,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01
PHP使用mysqli擴展連接MySQL數(shù)據(jù)庫
這篇文章主要介紹了PHP使用mysqli擴展連接MySQL數(shù)據(jù)庫,需要的朋友可以參考下2014-08-08
mySQL中in查詢與exists查詢的區(qū)別小結(jié)
最近被一個朋友問到mySQL中in查詢和exists的區(qū)別,當然只是草草的回答了下,今天偶然看到了一篇關(guān)于mysql中的exists查詢的文章,讀完感覺太”冷落”它了,這里總結(jié)一下,也跟自己常用的in查詢做一下對比。有需要的朋友們可以參考借鑒,下面來一起學習學習吧。2016-11-11
Mysql中批量替換某個字段的部分數(shù)據(jù)(推薦)
這篇文章主要介紹了Mysql中批量替換某個字段的部分數(shù)據(jù),通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02

