繁体   English   中英

在oracle表中将数据从一列复制到另一列

[英]Copy data from one column to another in oracle table

我目前的客户项目要求我使用Oracle数据库(11g)。 我以前的大部分数据库经验都是使用MSSQL Server,Access和MySQL。 我最近遇到了一个对我来说非常奇怪的问题,我希望有人可以提供一些清晰度。

我当时希望做一个如下声明:

update MYTABLE set COLUMN_A = COLUMN_B;

MYTABLE有大约1300万行。

源列已编制索引(COLUMN_B),但目标列不是(COLUMN_A)

主键字段是GUID。

这似乎运行了4个小时,但似乎永远不会完成。

我与一位比我更熟悉Oracle的前开发人员交谈过,他们告诉我你通常会创建一个程序,将其分解为要提交的数据块(大约1000条记录左右)。 此过程将遍历1300万条记录并提交1000条记录,然后提交下一条1000 ...通常会根据主键断开数据。

根据我对其他数据库系统的经验,这听起来有些愚蠢。 我没有加入另一个表,或链接到另一个数据库。 我只是将数据从一列复制到另一列。 考虑到数十亿条记录的订单中有系统,我不认为1300万条记录很大。 我无法想象在一个表中复制一个简单的数据列需要一个小时和几小时的计算机(只是失败),整个表占用的存储空间不到1 GB。

在尝试完成我想要的替代方法时,我尝试了以下方法:

create table MYTABLE_2 as (SELECT COLUMN_B, COLUMN_B as COLUMN_A from MYTABLE);

这花了不到2分钟来完成完全相同的最终结果(减去第一个表并重命名新表)。

为什么UPDATE运行4小时而失败(只是将一列复制到另一列),但复制整个表的create table只需不到2分钟?

是否有任何最佳实践或常用方法来进行此类更改? 谢谢你的帮助!

这对我来说确实很奇怪。 但是,我想到了这一点:

更新表时,必须创建事务日志以防需要回滚。 创建一个表,这是不必要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM