我们将clob数据以XML格式存储在数据库中,数据类型为CLOB。
为了获得这些数据,我们尝试使用以下查询:
select message_xml
from table
where dbms_lob.instr(message_xml, 'A12345678') > 0
order by message_date;
但是这个查询需要花费很长时间才能得到结果。
有没有更好的方法来做到这一点。
请注意,我在Oracle 11g数据库中触发查询。
答案 0 :(得分: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)提取函数base-index。
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 和关于xml索引的{oracle文档xmlIndex