Postgresql
PostgreSQL B-tree,好的單調值?
我正在為我的應用程序創建一個唯一的 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索引中的單調值最初會減少碎片,因此效率更高,但這可能是一個最小的問題,因為您的值將非常獨特並且您的數據總量是微小的。