[英]What is stored in the leaf node of clustered index
小心你讀到的東西。 確保文章談論“MySQL”及其主要“引擎”“InnoDB”。
主鍵存儲的是真實記錄的塊地址,而不是真實的表記錄。
數據的 B+Tree 的每個葉節點(塊)中存儲了幾整行。 該 BTree 由PRIMARY KEY
排序,它(顯然)是行的一部分。
唯一的“塊地址”是兩個圖中的鏈接。
我投票支持你的 2 號圖表,附帶以下條件:
一個“塊”為 16KB,可以容納 1 到數百行,具體取決於
(對於數據或索引,每個塊 100 行是一個簡單的經驗法則。)
In the context of mysql and innodb, from the mysql official pagehttps://dev.mysql.com/doc/refman/8.0/en/innodb-index-types.html
每個 InnoDB 表都有一個特殊的索引,稱為聚集索引,用於存儲行數據。
如果表很大,與使用與索引記錄不同的頁面存儲行數據的存儲組織相比,聚集索引架構通常會節省磁盤 I/O 操作。
基於上述事實,尤其是第 2 點,我相信第 2 點是正確的。 在我看來,原因是(1)節省一次 I/O。 如果葉子節點保存了頁地址,將有更多的 I/O 時間來獲取記錄。
(2)更多的可維護性。 如果發生分頁,葉子節點只保存頁地址,聚集索引更新記錄數據頁地址會很麻煩。
但是,我認為#1 有觀點的原因是只保存地址比保存整行記錄數據便宜,因此存儲更多索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.