假设有两张表a和b,需要把a的值复制到b表上,一般的做法如下:
update b set value=(select a.value from a where a.id=b.id)
在vertica上执行这样的update语句是很慢的,有一个推荐的解决方案,是使用set using 和refresh_columns机制。具体如下
create table a ( id int, value varchar(100); ); create table b ( id int, value varchar(100) set using(select a.value from a where a.id=b.id) ); select refresh_columns('b', 'value', 'REBUILD');
如果表有分区,执行 REFRESH_COLUMNS 的时候还可以加两个参数,缩小刷新分区值得范围。
参考文档: