我有一个大数据表,我想更新它。我有办法做到这一点。首先,复制原表并对其进行中继。之后,我将使用create作为表副本的select。所以我不会使用更新表达式。这样会更有效吗?
发布于 2014-08-06 11:36:58
问题的答案实际上取决于有多少行受到更新的影响。显然,将100,000,000行复制到另一个表以更新一行是无效的。要更新所有这些内容,可能是有益的,因为插入通常比更新更快。
在进行此路径之前,我希望了解更新了多少行。如果不是很多,那么适当的索引可能会提高更新的性能。
然而,您的方法的逻辑并不完全正确。我愿意这样做:
create table temp_copy as
select . . .
from bigtable . . .;你的逻辑进入了select。然后,截断大表并重新插入:
truncate table bigtable;
insert into bigtable
select *
from temp_copy;发布于 2014-08-06 11:47:14
谁把桌子截短了?我假设您的表上没有约束(如果您不能执行截断!)。命令重命名更简单;它将与其他方法一样简单。您可以这样做(我接受您的代码):
你的代码:
truncate table table1;
insert into table1 select * from table1_copy代之以:
drop table table1 ;
alter table table1_copy rename to table1;
recreate index of table1https://stackoverflow.com/questions/25157698
复制相似问题