gpt4 book ai didi

oracle - 插入 varchar2 列从 xmltype 列 : extremely slow 中选择

转载 作者:行者123 更新时间:2023-12-01 05:08:56 25 4
gpt4 key购买 nike

我正在使用 oracle10gR2 10.2.0.4 和 solaris10 64bit

我需要从 xmltype 列表(word.testmeta)中的 xml 中选择数据值并插入到另一个表中(word.testwordyy)

desc word.testmeta;
Name Null? Type
--------------------------------------
FILENAME CHAR(2000)
XMLDATA XMLTYPE

desc word.testwordyy;
Name Null? Type
---------------------------------------
ID VARCHAR2(255)
KEYWORD VARCHAR2(4000)

我使用 xmltable 并执行:

insert /*+append */ into word.testwordyy(KEYWORD)
select /*+ gather_plan_statistics */ dbms_lob.substr(xmltype.getclobval(b.KEWOR),254)
from word.testmeta , xmltable
(
'$B/mets/KEWOR'
passing
word.testmeta.XMLDATA as B
columns
KEWOR xmltype path '/KEWOR/text()'
)
b

这是解释计划select * from table(dbms_xplan.display_cursor(null,null,'iostats last'));

PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------------------------------------------------
SQL_ID 37ua3npnxx8su, child number 0
-------------------------------------
insert /*+append */ into word.testwordyy(KEYWORD) select /*+ gather_plan_statistics */
dbms_lob.substr(xmltype.getclobval(b.KEWOR),254) from word.testmeta , xmltable ( '$B/mets/KEWOR' passing
> word.testmeta.XMLDATA as
B columns KEWOR xmltype path '/KEWOR/text()' ) b

Plan hash value: 875848213
-----------------------------------------------------------------------------------------------------------------------------------

PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads | Writes |
-----------------------------------------------------------------------------------------------------------------------------------
| 1 | LOAD AS SELECT | | 1 | | 1 |00:10:32.72 | 16832 | 7 | 90 |
| 2 | NESTED LOOPS | | 1 | 29M| 34688 |00:00:25.95 | 12639 | 5 | 0 |
| 3 | TABLE ACCESS FULL | TESTMETA | 1 | 3638 | 3999 |00:00:00.08 | 909 | 0 | 0 |
| 4 | COLLECTION ITERATOR PICKLER FETCH| XMLSEQUENCEFROMXMLTYPE | 3999 | | 34688 |00:00:24.50 | 11730 | 5 | 0 |

Note
-----
- dynamic sampling used for this statement


21 rows selected.

并且表word.testmeta的行数越多,每行花费的时间越多

我的 XML 简单而小,但需要处理大量 (5000000)当行数超过 8000 时,处理速度非常非常慢,需要几个小时。有什么优化或者更快的方法吗?

最佳答案

您已将 KEYWOR 列定义为 XMLTYPE。这是为什么? XMLTABLE 的全部意义在于将 XML 结构转换为关系列。如果您将列定义为简单的字符串,则可以避免很多不必要的转换。

"the contents of the tag are more than 4000 characters>>> are there any methods to substring the contents of the tag in the xmltable"

有 XPath substring 函数。

insert /*+append */ into word.testwordyy(KEYWORD)
select /*+ gather_plan_statistics */ b.KEWOR
from word.testmeta
, xmltable
(
'$B/mets/KEWOR'
passing
word.testmeta.XMLDATA as B
columns
KEWOR varchar2(4000) path 'substring(KEWOR, 254, 4000)'
) b

在这里,我已经开始使用您在原始帖子中使用的偏移量 254 的子字符串。我还明确地将其长度设置为 4000。

我认为您在声明列时不需要显式引用 text() 节点。

关于oracle - 插入 varchar2 列从 xmltype 列 : extremely slow 中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26427742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com