【发布时间】:2015-09-09 14:18:35
【问题描述】:
我正在使用一个简单的查询来更新一个包含数百万条记录的表,但它需要大量的时间,想知道是否有人可以带来一些魔术来加快下面的过程查询
UPDATE sources.product
SET partial=left(full,7);
【问题讨论】:
-
试图以更小的块进行?太大的交易可能会减慢速度。
-
你知道这个查询会更新你表中的每条条记录,对吧?
-
问题是你为什么要这样做?您需要将完整列的数据复制到部分吗?视图不能这样做吗? (数据不一致安全替代方案。)
-
我在这里和 jarlh 在一起。如果您希望
partial始终等于left(full,7),则不要存储它。你只会引入冗余。另一方面,如果partial会发生变化,那么这只是一次仅完成一次的初始填充,那么为什么要关心它所花费的时间呢? -
不,它通常没有那么快,因为必须进行字符串操作,而不仅仅是读取值。但是您可以创建一个功能索引以便快速访问:
create index idx_product_leftfull7 on product( left(full,7) );。因此,您可以快速获得它,而且您的数据没有任何冗余。
标签: sql postgresql sql-update pgadmin sql-optimization