天天看點

【DB吐槽大會】第32期 - PG 沒有全局索引

背景

1、産品的問題點

  • PG 沒有全局索引

2、問題點背後涉及的技術原理

  • PG的索引支援到表級别, 如果是分區表那麼每個分區建立對應索引, 不能針對分區表建立全局索引.

3、這個問題将影響哪些行業以及業務場景

  • 使用了分區表, 且希望對非分區字段進行全局唯一限制的場景.
    • 分區表隻能選擇一種分區鍵, 如果要限制唯一性, 必須包含分區鍵, 例如ID, 那麼可以設定ID唯一, 或者(ID, col1)唯一, 但是不能設定col1唯一.
  • 使用了分區表, 并且在非分區字段有排序需求, 即使支援了merge sort還是覺得不夠的使用者. 必須最高速度從全局索引拿到結果.

4、會導緻什麼問題?

  • 無法支援非分區字段進行全局唯一限制的場景.
  • 對非分區字段排序, 即使每個分區上有對應索引, 也需要通路所有分區, 進行merge sort, 有一定性能影響.

5、業務上應該如何避免這個坑

  • 基本無解, 除非不使用分區表.

6、業務上避免這個坑犧牲了什麼, 會引入什麼新的問題

7、資料庫未來産品疊代如何修複這個坑

  • 希望核心層面支援分區表的全局索引

https://github.com/digoal/blog/blob/master/202109/20210903_08.md#postgresql-%E8%AE%B8%E6%84%BF%E9%93%BE%E6%8E%A5 https://github.com/digoal/blog/issues/76