将clob转换为xmltype,最快的xmltype()或xmlparse(document ...)

时间:2018-05-16 11:17:37

标签: sql oracle oracle11g

简单的问题,我有一个大型数据库,即将转换大约40GB的列(是的,该列占40GB,在90的表中)和7-8百万行,因此速度至关重要。 / p>

我正在使用的代码是这样的。

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,我唯一能看到的缺点是,如果数据为NULL,它会抛出一个错误,这是正常的数据不应为空。

所以问题。

UPDATE KJOERETOEY
SET ORIGIN = xmlparse(document ORIGIN_OLD);

更快或更慢
UPDATE KJOERETOEY
SET ORIGIN = xmltype.createXML(ORIGIN_OLD);

是否有任何技巧可以用来提高此类操作的速度。

1 个答案:

答案 0 :(得分:1)

使用40 GB的XML数据,我会假设大部分时间都花在编写LOB数据上。

  1. 我不会使用UPDATE来执行此操作,而是使用新结构创建一个新表。

  2. 此外,我会将新列和新列放置在不同的表空间中,以使事后清理起来更容易。

  3. 对于XMLTYPE,我考虑将其存储为BINARY XML。

  4. 我将其存储在SECUREFILE中,而不是BASICFILE

  5. 如果您具有Advanced Compression选项,则尝试以压缩形式存储BINARY XML。

用少量样品进行测试。

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;