有主表键(Enterpriseid, Ownertype, Ownerid, Itemtype, Itemid)
的表EFORMDYNAMICFIELDINSTANCE
。Oracle Update更新主键列需要很长时间
为了将主键更改为单列,即EDFI_ID
我们想要将此EDFI_ID
更新为以7000000为增量值。
这张表几乎没有50000条记录需要10小时更新。 这是我的表认定中:
ENTERPRISEID NOT NULL NUMBER(10),
OWNERTYPE NOT NULL VARCHAR2(60),
OWNERID NOT NULL NUMBER(10),
ITEMTYPE NOT NULL VARCHAR2(60),
ITEMID NOT NULL NUMBER(10),
EDFI_ID NOT NULL NUMBER(10),
FIELD1 VARCHAR2(2000),
FIELD2 VARCHAR2(2000),
...
FIELD199 VARCHAR2(2000),
FIELD200 VARCHAR2(2000)
早些时候,我们曾(ENTERPRISEID, OWNERTYPE, OWNERID, ITEMTYPE, ITEMID)
作为主键。
Now EDFI_ID
是我的主键列,我们想用(rownumber + 7000000)
来更新这个主键。该表约有50000条记录,EDFI_ID
应更新为7000000,7000001,7000002 .... 7050000。
请建议一个UPDATE
声明,这将花费更少的时间。截至目前我的上述UPDATE
需要10个小时。
什么的WHERE存在意义呢?你想更新每一行,对吗? –
使用CATS [cats](http://www.dba-oracle.com/t_create_table_select_ctas.htm)创建新表 –
此语句具有O(N^2)性能。使用合并语句,在using子句中计算新的edfi_id,并在“matched”子句中使用新计算的edfi_id,并跳过“not matched”子句。这会让你回到O(N)的表现。 –