Postgres 如何製作其 B-tree 索引?
我想估計使用 B-tree 方法需要多少讀取 PostgreSQL 的部分索引,因為我無法直接更改塊大小。關於這里和這里關於塊大小的索引的 PostgreSQL 手冊,對於 aux 為 100,因此有 3 次讀取。
塊大小占用的預設記憶體為 8 KB,即通常為 1 個塊,但我不確定這是否可行,因為
log_1(2)
它是無窮大的。我的想法是,通過考慮塊大小決定讀取次數的 B-tree,這裡也可能在 PostgreSQL 中動態計算讀取次數。我想知道這在塊大小中有多少:塊大小log_b n
在哪裡,事件數在哪裡。我認為它在數學上不可能是一個。我認為 Postgres B-tree 是按照 Wiki 頁面中描述的標準方式實現的,Cormen 等人也描述了。b``n
基於此答案,B-tree 索引僅包含 PostgreSQL 中的鍵。然後數據再次出現在邏輯堆的表中。索引的重點是儲存開始的鍵。數據位於表中,表是邏輯堆,基於此處。我對 PostgresSQL 如何製作名為 B-tree 的實體感興趣。基於此處,B-tree 索引和表的物理儲存使用相同的數據頁,頁佈局基本相同。但是,我對這個實體如何協同工作很感興趣。可能,索引和數據的功能可以這樣描述:
B-Tree從根而不是從葉子生長。
但更準確地說,來自 Sumathi 關於關係數據庫管理系統的基礎知識(計算智能研究):
在 B-tree 中,非葉節點大於葉節點。指向數據記錄的指針存在於樹的所有級別。
在 B+tree 中,指針只存在於葉子上。如何評估 B-tree 的指針系統?您如何描述 PostgreSQL B-tree 佔用的大 O 空間?Postgres 如何製作其 B-tree 索引?
仍然,
PostgreSQL B-Tree 索引非常強烈地基於Lehman 和 Yao 的實現,其中包括大量面向多版本並發控制的工作,但本文中仍有大量資訊。
**當然,PostgreSQL 並沒有對論文中的方法進行 100% 準確的複制,要找到差異,除了(1)找一個了解 PostgreSQL B-Tree 的人之外幾乎沒有其他辦法,有時間去翻翻錯綜複雜的解釋,或者(2)**自己去探勘原始碼。
另一種可能是您訪問Bruce Momjian 的優秀參考網站,他在其中更詳細地討論了 PostgreSQL 內部結構。
但是,在這種情況下,根據您問題的性質,我覺得您可能對 B-Tree 索引的工作方式存在根本性的誤解。在這種情況下,我認為Google搜尋,或者閱讀像Elmasri 和 Navathe 的數據庫系統基礎這樣的教科書的一部分會對你有好處。