我正在设计2张桌子。
user_table (userid username)
预期的100K记录
transaction_table(transactionid, date, description, userid)
预计有50亿条记录。预计每位用户将近50,000笔交易。
transaction_table
存储用户完成的交易。此表很少有UPDATE
或DELETE
个操作。有大量SELECT
和INSERT
操作,但所有操作都基于userid
。所以,我要么将用户的交易插入表中,要么我返回特定用户的交易。
分区transaction_table
是否有意义?
这是因为,将有100K分区表,每个分区表用于1个用户。这在任何意义上都是好的吗?
我还有哪些其他选项可以在INSERT
上快速执行SELECT
和transaction_table
次操作?
答案 0 :(得分:0)
Postgresql不建议创建many partitions:
检查主表的所有分区上的所有约束 在约束排除期间,可能存在大量分区 大大增加查询计划时间。使用这些分区 技术可以很好地与大约一百个分区一起使用; 不要尝试使用数千个分区。
在我看来,date
(例如每月)创建的分区可能会好得多。
另一种选择是按userid%100
创建分区,但不是每个用户创建分区。