覆蓋索引
基礎(chǔ)解釋
索引是高效找到行的一個(gè)方法,但是一般數(shù)據(jù)庫也能使用索引找到一個(gè)列的數(shù)據(jù),
因此它不必讀取整個(gè)行钱磅。畢竟索引葉子節(jié)點(diǎn)存儲(chǔ)了它們索引的數(shù)據(jù);當(dāng)能通過讀
取索引就可以得到想要的數(shù)據(jù)歌溉,那就不需要讀取行了云芦。一個(gè)索引包含了(或覆蓋了)
滿足查詢結(jié)果的數(shù)據(jù)就叫做覆蓋索引厘擂。
ps:
它包括在查詢里的Select涩笤、Join和Where子句用到的所有列(即建索引的字段
正好是覆蓋查詢條件中所涉及的字段嚼吞,也即,索引包含了查詢正在查找的數(shù)據(jù))蹬碧。
查看方法
explain sql語句:
extra (use index)有這個(gè)說明是覆蓋索引
使用條件
索引必須存儲(chǔ)列的值
ps:Hash 和full-text索引不存儲(chǔ)值舱禽,因此MySQL只能使用B-TREE。
并且不同的存儲(chǔ)引擎實(shí)現(xiàn)覆蓋索引都是不同的恩沽。并不是所有的存儲(chǔ)引擎
都支持它們呢蔫。如果要使用覆蓋索引。一定要注意SELECT 列表值取出需
要的列飒筑。不可以是SELECT * ,因?yàn)槿绻麑⑺凶侄我黄鹱鏊饕龝?huì)導(dǎo)致
索引文件過大绽昏。查詢性能下降协屡。不能為了利用覆蓋索引而這么做。
優(yōu)點(diǎn)
MySQL只需要通過索引就可以返回查詢所需要的數(shù)據(jù)全谤,而不必在查到索
引之后進(jìn)行回表操作肤晓,減少IO,提高了效率
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者