我有一个包含50个字段的表:
我粗略地说,(1)中的字段需要比(2)中的字段更频繁地访问1000次。
我应该将它们拆分为两个具有一对一关系的表,还是将它们全部放在同一个表中?
答案 0 :(得分:1)
您正在描述的过程有时被称为"垂直分区"。采取极端(每个垂直分区一列),这是柱状数据库存储数据的方式。不幸的是(据我所知),Postgres目前没有直接支持垂直分区。
您将数据拆分为两个表的想法很好。我会注意到以下几点:
join
包装到您想要额外列时使用的视图中。)join
应该非常快。INSTEAD OF
触发器处理此问题。在某些情况下,这可能是一场巨大的表现胜利。但还有其他手动工作可以使表保持同步。
答案 1 :(得分:0)
这里确实没有足够的信息来估计(更不用说实际上量化)可能带来的好处,但成本非常明确 - 更复杂的代码,更复杂的架构,可能更大整体空间使用情况,以及添加和删除行时的性能开销。
性能改进可能来自于在执行全表扫描时扫描少量数据,或者在需要时在内存中查找数据块的可能性增加,以及总体上更小的内存占用,但没有关于类型的特定信息通常执行的操作,以及服务器是否处于内存压力下,不能给出可靠的建议。
要非常谨慎地使你的系统变得更加复杂,这是不确定性能提升的副作用。