2

1 你好社区,

我们目前正在评估存储通用数据结构的可能性。我们发现,至少从功能的角度来看,Oracle XMLType 是旧 BLOB 的一个很好的替代品。因为您可以从 xml 查询和更新单个字段,还可以在 XPath 表达式上创建索引。

我们有点担心 XMLType 的性能。尤其是select的表现很有趣。我们有一次选择多个数据结构的查询。这些需要快速。

这样的查询看起来像这样

SELECT DOC_VALUE.getClobval() AS XML_VALUE FROM XML_TABLE WHERE d.ID = IN ('1','2',...);

我们的 XML 文档大小为 7 到 8 KB。我们在 Oracle 11g 上并创建类型为“XMLTYPE”的 XML 列

您是否有关于 xml 类型列的选择性能的经验。您对 XMLTYPE 有哪些总体经验。这是一个强大而快速的 Oracle 特性吗?还是它相当不成熟和实验性的东西。

问候, 马蒂亚斯

4

2 回答 2

0

XMLDB 是自 9i 以来我们拥有的强大且可靠的特性。

灵活模式的 XMLType 列是在隐藏的 CLOB 列上实现的,而固定模式的 XMLType 被分解为隐藏的表和视图;毕竟 XMLType 和标准对象一样可靠。

性能会因您的使用而异,但仅在 XMLType 上读取整个 XML 与在经典 CLOB 上读取相同的内容一样快,因为实际上它只是按原样读取并为您提供存储在 CLOB 上的 XML 代码。

于 2013-10-19T22:56:40.937 回答
0

您可以将 XDB.XMLIndex 分配给 XMLType,之后性能会很好。我们有一个只有 13,000 条记录的表,每条记录都包含一个不太大的 XML Clob,如果打印在文本上,每个记录可能有 40 页,运行没有 XMLIndex 的简单查询通常需要 10 多分钟,运行更复杂的查询通常需要 2 倍或 3 倍的时间!

使用 XMLIndex,性能与典型表相当(全表扫描大约为毫秒)。XMLIndex 可以像您需要的那样复杂,我尝试了这个幼稚的,它工作得很好:(我说幼稚是因为我不完全理解这种索引类型的内部工作原理!)

CREATE INDEX myschema.my_idx_name ON myschema.mytable
(SYS_MAKEXML(0,"SYS_SOMETHING$"))
INDEXTYPE IS XDB.XMLINDEX
NOPARALLEL;

您应该了解可供您使用的各种 XMLIndex 选项,并根据您的需要进行选择。文档: https ://docs.oracle.com/cd/B28359_01/appdev.111/b28369/xdb_indexing.htm#CHDJECDA

于 2017-08-05T07:18:16.620 回答