【发布时间】:2023-03-25 19:12:01
【问题描述】:
我有一个包含大数据的表,我想更新它。我有办法做到这一点。首先,复制原始表并将其截断。之后,我将使用 create 作为从表副本中选择。所以我不会使用更新表达式。是不是更有效?
【问题讨论】:
-
为什么要在 CPU 和内存上增加额外的处理负载来复制整个数据?你在哪里插入新值/更新?更新命令只会获取锁并将行放入应该被编辑的缓冲区。
-
我认为选择比更新更有效,尤其是在 oracle db 中。
-
那么更新命令用在哪里?
-
create table1_copy as select t1.c1,t1.c2,t2.c3 from table1 t1, table2 t2 c3 field is updated field from table2 to table1然后;截断 table1 并插入 table1 select * from table1_copy
-
为了回答您的问题,首先提出几个问题:表格的行数有多大?这些行中有多少会被更新?原表有外键约束吗?原始表上有索引吗?确实,有时 CTAS 操作(创建表作为选择)可以加快您的更新过程,因为它们不必维护引用完整性或维护索引。但是,这种方法并不总是适用于应用程序。
标签: sql oracle plsql oracle-sqldeveloper plsqldeveloper