日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

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

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

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

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

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

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

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

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

(3)

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。