Gra*_*ick 10 postgresql partitioning postgresql-performance
背景:我们的数据库中有两个相当大的表,一个包含 8000 万条记录,另一个包含 1.6 亿条记录。我们看到了性能问题,并正在考虑对这两个表使用表分区。
我的问题是:是否有很多记录表明我们应该分区或不分区以保持良好的性能?我知道没有“一刀切”的答案,但可能有一个一般性建议,例如“传递了 X 百万条记录,您应该对表进行分区”。有很多关于如何分区的指导,但没有关于“何时”的指导。
小智 12
不,没有真正的行数阈值。如果您只有按主键选择行的查询,那么表的大小并不重要。
分区主要也是一种管理工具,用于快速删除不再需要的行,而不是一种性能工具。
它可用于提高性能,但前提是您的查询只需要所有行的(小)子集。如果所有查询(或至少所有性能关键查询)都包含分区键,则分区可以帮助提高性能。
您还需要根据由此产生的分区数量选择分区键。使用 Postgres 12 或更高版本,“数千”个分区是可行的(我听说用户成功使用了约 20000 个分区,但我认为这已经是一个延伸) 。过多的分区很可能不切实际,因为它会使查询的规划速度变慢。
您还应该考虑到这样一个事实:分区表的主键内容受到限制 - 它必须包含分区键。因此,如果您有引用分区表的外键,这可能会变得复杂。