Hacker News 上看到「Lessons Learned from Running Postgres 13: Better Performance, Monitoring & More」這篇文章,其中有提到 PostgreSQL 13 因為 B-Tree 支援 deduplication,所以有機會縮小不少空間。
搜了一下源頭是「Add deduplication to nbtree.」這個 git commit,而 PostgreSQL 官方的說明則是在「63.4.2. Deduplication」這邊可以看到。
另外值得一提的是,這個功能在 CREATE INDEX 這頁可以看到在 PostgreSQL 13 預設會打開使用。
依照說明,看起來本來的機制是當 B-Tree index 內的 key 相同時,像是 key1
= key2
= key3
這樣,他會存 {key1, ptr1}
、{key2, ptr2}
與 {key3, ptr3}
。
在新的架構下開啟 deduplication 後就會變成類似 {key1, [ptr1, ptr2, ptr3]}
這樣的結構。可以看出來在 key 重複的資料很多的時候,可以省下大量空間 (以術語來說的話,就是 cardinality 偏低的時候)。
這樣看起來可以降低不少壓力...