日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

InnoDB 的辅助索引叶子节点为什么不直接保存的记录地址而要存主键键值

發(fā)布時間:2023/12/3 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 InnoDB 的辅助索引叶子节点为什么不直接保存的记录地址而要存主键键值 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)載自??InnoDB 的輔助索引葉子節(jié)點為什么不直接保存的記錄地址而要存主鍵鍵值

RT,最近看書關(guān)于innodb的
InnoDB是索引組織表,所以完整的數(shù)據(jù)記錄都存在聚集索引的葉子節(jié)點上
輔助索引的葉子節(jié)點保存的是對應(yīng)的主鍵鍵值,而另外一種存儲引擎myisam葉子節(jié)點保存的是記錄的地址

我的問題是InnoDB 的輔助索引葉子節(jié)點為什么不直接保存的記錄地址而要存主鍵鍵值?(導(dǎo)致在使用輔助索引的查詢中要兩次訪問索引)

ps:想到的一個可能原因是 update 非索引列時,不需要更新輔助索引頁,不知道還有沒有其它原因?

(1)
本身innodb是以主鍵為主排序的表。。所以對于innodb來講,其在磁盤的排序已經(jīng)由主鍵的順序定了,不能再按其它健排序。

其實輔助索引只要主鍵也有它的優(yōu)點:一個磁盤塊能存儲更多的鍵值,使其在進行索引查找是,只需要讀取相對少量的磁盤塊就能掃描完全表,加之讀到主鍵,再查詢記錄是比較快的。

根本原因是INNODB是主鍵的索引組織表,其物理存儲已經(jīng)由主鍵決定,不能再改變在磁盤中的存儲順序。

(2)
“一個磁盤塊能存儲更多的鍵值”
這個未必吧,還得取決于主鍵和地址的大小,地址一般由 文件號+塊號+塊內(nèi)偏移組成,大概10個字節(jié)
不過也可以作為一個考慮因素,謝謝你的回復(fù)

(3)

個人也覺得是跟DML有關(guān),當對一個innodb表進行大量DML后,B+樹會分裂,同一行記錄的頁地址會發(fā)生變化。
由于輔助索引記錄的是主鍵值,因此完全不用理會這個變化,如果輔助索引記錄的是實際頁地址,那DML一旦引起B(yǎng)+樹分裂,還得與輔助索引進行同步。

總結(jié)

以上是生活随笔為你收集整理的InnoDB 的辅助索引叶子节点为什么不直接保存的记录地址而要存主键键值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。