簡介
雖然使用Explain不能夠馬上調(diào)優(yōu)我們的SQL,它也不能給予我們一些調(diào)整建議,但是它能夠讓我們了解MySQL 優(yōu)化器是如何執(zhí)行SQL 語句的
通過Explain,我們可以分析出以下結(jié)果:
Explain命令的用法十分簡單, 在 select語句前加上 Explain 就可以了, 例如:
explain select * from user;
它的結(jié)果主要包含以下字段
id、select_type、table、partitions、type、possible_keys、key、ref、rows、filtered、extra
接下來我們來看一下各個字段的含義
id 查詢序列號
加載表的順序
連接查詢各個表的加載順序是相同的,所以都為1
包含子查詢的時候,先執(zhí)行子查詢,所以user表的id值最大
select_type 查詢類型
常用取值有:
table查詢涉及的表或衍生表
type查詢類型
通過 type 字段, 我們可以判斷此次查詢是全表掃描還是索引掃描等,type 常用的取值有:
system:表只有一條數(shù)據(jù)
const:針對主鍵或唯一索引的等值查詢掃描, 簡單理解為一次讀取就獲取到了數(shù)據(jù),例如下面這個主鍵索引的查詢
eq_ref:唯一性索引掃描,對于每個索引鍵,表中只有一條記錄與之匹配。常見于主鍵或唯一索引掃描
ref:非唯一性索引掃描,返回匹配某個單獨值的所有行
range:表示使用索引范圍查詢,例如=、>、>、>=、、=、IS、 NULL、=>、BETWEEN、IN等
index: 所要查詢的數(shù)據(jù)直接在索引樹中就可以獲取到, 而不需要掃描數(shù)據(jù),例如:
ALL: 表示全表掃描, 這個類型的查詢是性能最差的查詢
type 類型的性能比較
通常來說, 不同的 type 類型的性能關(guān)系如下:
ALL index range ref eq_ref const system
possible_keys查詢時能夠使用到的索引.
possible_keys 表示 MySQL 在查詢時, 能夠使用到的索引. 注意并不是一定用,實際使用是由 由 key 字段決定
key 查詢使用的索引
此字段是 MySQL 在當(dāng)前查詢時所真正使用到的索引.
key_len使用索引的字節(jié)數(shù)
這個字段可以評估組合索引是否完全被使用, 或只有最左部分字段被使用到.
rows MySQL估算要查找到結(jié)果集需要掃描讀取的數(shù)據(jù)行數(shù)
Extra額外的信息
常見的有以下幾種內(nèi)容:
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。
標(biāo)簽:瀘州 威海 荊門 那曲 柳州 景德鎮(zhèn) 淮安 江蘇
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《你真的知道怎么優(yōu)化SQL嗎》,本文關(guān)鍵詞 你,真的,知道,怎么,優(yōu)化,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。