mysql 执行计划extra_mysql执行计划explain type和extra
mysql執(zhí)行計(jì)劃,搞定type和extra就能優(yōu)化大部分sql了。type為主,extra為輔。
type:
system表只有一行,MyISAM引擎。
const常量連接,表最多只有一行匹配,通用用于主鍵或者唯一索引比較時(shí)
eq_ref每次與之前的表合并行都只在該表讀取一行,這是除了system,const之外最好的一種,特點(diǎn)是使用=,而且索引的所有部分都參與join且索引是主鍵或非空唯一鍵的索引
ref如果每次只匹配少數(shù)行,那就是比較好的一種,使用=或<=>,可以是左覆蓋索引或非主鍵或非唯一鍵
fulltext全文搜索
ref_or_null與ref類似,但包括NULL
index_merge表示出現(xiàn)了索引合并優(yōu)化(包括交集,并集以及交集之間的并集),但不包括跨表和全文索引。這個(gè)比較復(fù)雜,目前的理解是合并單表的范圍索引掃描(如果成本估算比普通的range要更優(yōu)的話)
unique_subquery在in子查詢中,就是value in (select…)把形如select unique_key_column的子查詢替換。PS:所以不一定in子句中使用子查詢就是低效的!
index_subquery同上,但把形如”select non_unique_key_column“的子查詢替換
range常數(shù)值的范圍
index索引樹(shù)掃描。a.當(dāng)查詢是索引覆蓋的,即所有數(shù)據(jù)均可從索引樹(shù)獲取的時(shí)候(Extra中有Using Index);b.以索引順序從索引中查找數(shù)據(jù)行的全表掃描(無(wú) Using Index);c.如果Extra中Using Index與Using Where同時(shí)出現(xiàn)的話,則是利用索引查找鍵值的意思;d.如單獨(dú)出現(xiàn),則是用讀索引來(lái)代替讀行,但不用于查找
all全表掃描(full table scan)
extra:
Using index索引最優(yōu)
Using index?condition命中索引,但是查詢的列不在索引樹(shù)中,導(dǎo)致需要查找實(shí)際行記錄,看情況優(yōu)化
Using index?where只有where,可能沒(méi)走索引,結(jié)合type看情況優(yōu)化
Using indexfilesort排序優(yōu)化order by,加索引,需要優(yōu)化
Using temporary臨時(shí)表,需要優(yōu)化
Using join buffer (Block Nested Loop)兩個(gè)關(guān)聯(lián)表join,關(guān)聯(lián)字段均未建立索引,需要優(yōu)化
null為空時(shí)需要去type找原因
總結(jié)
以上是生活随笔為你收集整理的mysql 执行计划extra_mysql执行计划explain type和extra的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java date 相差_java 比较
- 下一篇: 腾讯QQ长达八年的服务将下架:8月起不再