Postgresql

PostgreSQL B-tree,好的單調值?

  • February 21, 2021

我正在為我的應用程序創建一個唯一的 ID 生成器。我到處都在讀到單調鍵使 b-tree 的生活更輕鬆。我通過結合時間部分隨機部分生成一個 ID ,結果是一個 BIGINT。一個月內 30 次插入看起來像:

161382496505555475
161383496513869363
161384566521269728
161387696534951408
161391066542917771
161395676557845188
161396876568927786
161403566572243244
161406876581461654
161411576592302253
161432366601557433
161454566612380546
161497816626330847
161498126638855404
161522016645286994
161542136651268281
161552156668048334
161556516672713275
161567476682846578
161587696692945392
161598426706622187
161599986719703849
161602466723494896
161633486735133538
161634866748327052
161654886754576805
161665966765069819
161686876779287376
161688676786669774
161699126792749601

前 11 位數字始終是連續的,後 7 位數字始終是隨機的。這適用於 PostgreSQL 12 索引嗎?

使用B-Tree索引,更重要的是您要索引的數據的基數。索引中的數據越獨特,通常它就越適合B-Tree索引,因為它會產生具有許多分支和葉子的更*完整的樹。*一個非常不唯一的欄位,例如基於布爾值的欄位,將始終只有兩個不同的值,因此非常重複,導致兩個短而寬的分支,並且不會像更獨特的欄位那樣過濾數據。

由於您計劃BIGINT用隨機值索引一個欄位,因此它應該會產生非常獨特的數據,並且 B-Tree 索引應該表現得非常好,而不管這些值的單調性如何。此外,如果您每月只插入 30 個值,那麼您的表必須很小,因此您完全不必擔心使用B-Tree索引。B-Tree索引可以很好地處理數十億行。

要回答您的實際問題,是的,B-Tree索引中的單調值最初會減少碎片,因此效率更高,但這可能是一個最小的問題,因為您的值將非常獨特並且您的數據總量是微小的

引用自:https://dba.stackexchange.com/questions/285727