加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

oracle – 插入到varchar2列中从xmltype列中选择:极慢

发布时间:2021-01-12 07:14:09 所属栏目:站长百科 来源:网络整理
导读:我行使的是oracle10gR2 10.2.0.4和solaris10 64bit 我必要从xmltype列表(word.testmeta)中的xml中选择数据值 并插入另一个表(word.testwordyy) desc word.testmeta; Name Null? Type -------------------------------------- FILENAME CHAR(2000) XMLDATA XM

我行使的是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简朴而小巧,但必要处理赏罚大量的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子串函数.

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()节点.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读