oracle – 插入到varchar2列中从xmltype列中选择:极慢
我行使的是oracle10gR2 10.2.0.4和solaris10 64bit 我必要从xmltype列表(word.testmeta)中的xml中选择数据值 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) 办理要领您已将KEYWOR列界说为XMLTYPE.这是为什么? XMLTABLE的重点是将XML布局转换为相关列.假如您将列界说为简朴字符串,则可以停止大量不须要的转换.
有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()节点. (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |