【发布时间】:2023-03-09 07:27:01
【问题描述】:
假设我有下表playgrounds:
serialnumber length breadth country
1 15 10 Brazil
2 12 11 Chile
3 14 10 Brazil
4 14 10 Brazil
现在,我想在表中添加一列 area,本质上是 length*breadth。
显然,我可以进行此更新:
UPDATE playground set area = length*breadth where country = 'Brazil'.
使用上述语句,我将不得不为序列号 3 和 4 计算两次不必要的长度 * 宽度。有没有办法添加 group by 并最大限度地减少计算量?
类似:
UPDATE playground set area = length*breadth where country = 'Brazil'
group by length, breadth;
【问题讨论】:
-
有一些方法,如何只计算一次表达式,但是使用这些方法的计算成本必须相当高。简单的方法(重复评估)不需要随机 io - 你只需 seq 扫描。其他方法需要选择不同的值,计算,然后加入计算值。您的问题与错误的规范化有关 - 在设计良好的数据库上,您不需要解决类似的问题。
标签: postgresql group-by sql-update duplicates