考虑以下情况:
UUID
。UUID是随机生成的,并且均匀地分布在UUID空间上。基本上,这意味着所有256个分区都将被同等使用(与基于时间的解析不同,在这种情况下,最近的解析通常比其他分区更热)。
通过这样的分区,我会看到性能有任何改善吗?
基于UUID的查询返回一个单行(WHERE uuid_key = :id
)?
)的查询。
发布于 2022-07-05 00:24:23
大多数查询将变得更慢。例如,如果通过uuid_key
进行搜索,优化器必须确定要搜索哪个分区,这会随着分区数的增加而增加。索引扫描本身在小表上不会比在大表上快得多。
如果您有几个分区相同的表,并且在分区键上将它们连接起来,这样就可以获得分区连接(但请记住设置enable_partitionwise_join = on
),您可以从中受益。分区聚合也有类似的速度增长。
即使您不能期待查询的性能提高,分区仍然有其用途,例如,如果您需要几个自动真空工作人员来处理单个表。
发布于 2022-07-05 00:19:20
通过执行这种类型的分区,
将看到性能上的任何改善:
对于基于UUID的查询,返回一行(其中uuid_key = :id)?
是的: Postgresql将只在正确的分区中搜索。此外,您还可以在插入或更新中获得性能,减少页面争用。
不完全是,但是索引设计可以将问题最小化。
https://stackoverflow.com/questions/72866056
复制