问题很简单,我有一个很大的数据库,我打算转换一个大约40 is的列(是的,在一个90 is的表中,该列占40 is)和700-800万行,因此速度至关重要。
我使用的代码是这样的。
ALTER TABLE KJOERETOEY
RENAME column ORIGIN TO ORIGIN_OLD;
ALTER TABLE KJOERETOEY
ADD ORIGIN XMLTYPE NULL;
UPDATE KJOERETOEY
SET ORIGIN = xmlparse(document ORIGIN_OLD);
ALTER TABLE KJOERETOEY
drop column ORIGIN_OLD;然后,在我空闲并等待它完成的时间里,我注意到存在一个xmltype.createXML,唯一的缺点是,如果数据为空,它将抛出一个错误,这是可以的,因为数据不应该为空。
所以问题是。
是
UPDATE KJOERETOEY
SET ORIGIN = xmlparse(document ORIGIN_OLD);快于或慢于
UPDATE KJOERETOEY
SET ORIGIN = xmltype.createXML(ORIGIN_OLD);有没有什么技巧可以用来提高这类操作的速度?
发布于 2018-06-27 16:57:27
对于40 GB的XML数据,我假设大部分时间都花在写LOB数据上。
UPDATE做这件事,而是用新的结构创建一个新的表。此外,我会将旧的和新的列放在不同的表空间中,以便更容易地清理afterwards.。
用一个小样本来测试它。
RENAME TABLE kjoeretoey TO kjoeretoey_old;
CREATE TABLE kjoeretoey (
id number,
origin XMLTYPE,
...
) XMLTYPE COLUMN origin STORE AS SECUREFILE BINARY XML (
TABLESPACE my_xml_tablespace DISABLE STORAGE IN ROW COMPRESS HIGH
);
INSERT INTO kjoeretoey (id, origin, ...)
SELECT id, XMLTYPE(origin) ... FROM kjoeretoey_old;
DROP TABLE kjoeretoey_old;https://stackoverflow.com/questions/50369482
复制相似问题