一署穗、覆蓋索引
覆蓋索引(covering index)指一個(gè)查詢語(yǔ)句的執(zhí)行只用從索引中就能夠取得稚叹,不必從數(shù)據(jù)表中讀取。也可以稱之為實(shí)現(xiàn)了索引覆蓋。
如果一個(gè)索引包含了(或覆蓋了)滿足查詢語(yǔ)句中字段與條件的數(shù)據(jù)就叫做覆蓋索引凫海。
二、覆蓋索引實(shí)例
1.未建立索引前
select SQL_NO_CACHE count(name) from index_test where name = '小明' and id_card = '142701199999999999' and type = '2' and hobby = '籃球' and timeline = '1505270575';
explain select SQL_NO_CACHE count(name) from index_test where name = '小明' and id_card = '142701199999999999' and type = '2' and hobby = '籃球' and timeline = '1505270575';
2.添加覆蓋索引
alter table index_test add index index_all(name,id_card,type,hobby,timeline);
三男娄、總結(jié)
當(dāng)一條查詢語(yǔ)句符合覆蓋索引條件時(shí)行贪,sql只需要通過索引就可以返回查詢所需要的數(shù)據(jù)把兔,這樣避免了查到索引后再返回表操作,減少I/O提高效率瓮顽。
使用覆蓋索引Innodb比MyISAM效果更好----InnoDB使用聚集索引組織數(shù)據(jù)县好,如果二級(jí)索引中包含查詢所需的數(shù)據(jù),就不再需要在聚集索引中查找了
注:遇到以下情況暖混,執(zhí)行計(jì)劃不會(huì)選擇覆蓋查詢
1.select選擇的字段中含有不在索引中的字段 缕贡,即索引沒有覆蓋全部的列。
2.where條件中不能含有對(duì)索引進(jìn)行l(wèi)ike的操作拣播。