2017-06-13 152 views
0

我们以XML格式将clob数据存储在数据库中,数据类型为CLOB。dbms_lob.instr花费很长时间才能获取数据

因此,要获得这些数据,我们尝试使用下面的查询:

select message_xml 
    from table 
where dbms_lob.instr(message_xml, 'A12345678') > 0 
order by message_date; 

但此查询大约需要一个小时以上很长的时间给我的结果。

有没有更好的方法来做到这一点。

请注意,我正在解答Oracle 11g数据库中的查询。

回答

0

是或否你的问题是一般性的。答案取决于许多因素。 你有两个简单的解决方案,一个更复杂。

1)平凡的基于函数的索引。仅适用于一个搜索值。

create fb_trivial index on table(dbms_lob.instr(message_xml, 'A12345678')) 

和查询利用这个指数

select message_xml 
    from table 
where dbms_lob.instr(message_xml, 'A12345678') > 0 
order by message_date; 

2)提取功能基索引。

create index fb_extract_index on table(extractvalue(xmltype(message_xml),'/path/to/your/value')) 

或版本与namaspaces

create index fb_extract_index on table(extractvalue(xmltype(message_xml),'/ns:path/ns:to/ns:your/ns:value', 'xmlns:ns="namespace:from:xml" ')) 

和查询利用

select message_xml from table where extractvalue(xmltype(message_xml),'/path/to/your/value')) = 'A12345678' 

3)对于更复杂的解决方案是指oracle-11g-xmlindex-part-1 和Oracle的文档有关的XML索引本文xmlIndex

+0

整个问题在于我d o在这个数据库上没有写权限。我们只有一个阅读权限:( –