簡體   English   中英

聚集索引的葉子節點存儲什么

[英]What is stored in the leaf node of clustered index

我知道在聚集索引的葉節點中,表記錄與主鍵一起存儲。

但是我發現有些文章說主鍵是用真實記錄的塊地址而不是真實的表記錄來存儲的。

你能告訴我哪個是正確的嗎?

(1)存儲塊地址在此處輸入圖像描述

(2)存儲真實數據在此處輸入圖像描述

小心你讀到的東西。 確保文章談論“MySQL”及其主要“引擎”“InnoDB”。

主鍵存儲的是真實記錄的塊地址,而不是真實的表記錄。

數據的 B+Tree 的每個葉節點(塊)中存儲了幾整行。 該 BTree 由PRIMARY KEY排序,它(顯然)是行的一部分。

唯一的“塊地址”是兩個圖中的鏈接。

我投票支持你的 2 號圖表,附帶以下條件:

  • 有一個 id=6 的 4 列行和 James, 37, LA 的其他列。
  • id=15 的行未完全顯示。 也就是說,您遺漏了其他 3 列。

一個“塊”為 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM