亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Innodb覆蓋索引的幾個疑問

Innodb覆蓋索引的幾個疑問

慕尼黑8549860 2019-05-20 10:01:44
對InnoDB覆蓋索引的疑問首先,我對覆蓋索引的了解是,如果創建了二級索引后,要想做到覆蓋索引,那么你select的列就要被你的索引所覆蓋比如,當我創建一個二級索引idx_name_age(name,age)對selectnamefromuserwherename="Jhon";語句,自然就可以做到覆蓋索引這樣就不用再回表走聚簇索引了但是當我selectidfromuserwhereid=1;時,這個用到了主鍵索引,也就是會直接走聚簇索引,既然走聚簇索引的話,B+Tree的葉子節點是包含所有列的,那我認為select*fromuserwhereid=1;也是一樣的但explain的分析結果發現selectidfromuserwhereid=1;是主鍵索引,并且做到了覆蓋索引但是select*fromuserwhereid=1;雖然是主鍵索引,但卻不是覆蓋索引,這是為啥?
查看完整描述

1 回答

?
慕無忌1623718

TA貢獻1744條經驗 獲得超4個贊

可以這樣理解吧,主鍵索引,那么就是按照主鍵排序,組成B+樹,例如你的id,那么主鍵索引的索引鍵就是id,而剩余的行數據只是跟在索引鍵后面而形成聚簇表,主鍵索引并沒有對除主鍵以外的數據進行索引;那么,從覆蓋索引的概念:select語句所有要查詢的列都必須是索引鍵,也就是說對于主鍵索引,覆蓋索引應該是只查主鍵,這樣主鍵索引才起到“覆蓋”的作用;而select*是需要把整行數據都查出來,并不只是查詢主鍵了。
                            
查看完整回答
反對 回復 2019-05-20
  • 1 回答
  • 0 關注
  • 645 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號