我有一个包含大数据的表,我想更新它。我有办法做到这一点。首先,复制原始表并截断它。之后,我将使用create作为表的副本中的select。所以我不会使用更新表达式。它更有效吗?
答案 0 :(得分:1)
您的问题的答案实际上取决于更新影响的行数。显然,将100,000,000行复制到另一个表中以更新一行是无效的。要更新所有这些内容可能会有所帮助,因为插入通常比更新更快。
在走这条路之前,我想了解有多少行正在更新。如果不是很多,那么适当的索引可能会提高更新的性能。
然而,你的方法的逻辑并不完全正确。我倾向于这样做:
create table temp_copy as
select . . .
from bigtable . . .;
你的逻辑在select
。然后,截断大表并重新插入:
truncate table bigtable;
insert into bigtable
select *
from temp_copy;
答案 1 :(得分:0)
Whhi截断了桌子? 我假设你的表没有约束(如果你不能做截断!)。 你更简单的命令重命名; 它将像其他方法一样谨慎。 你可以做那样的事情(我带你的代码):
您的代码:
truncate table table1;
insert into table1 select * from table1_copy
替换为:
drop table table1 ;
alter table table1_copy rename to table1;
recreate index of table1