我正在使用oracle 11g并且有一个带有XMLType的表。此表中有许多记录,每个XML包含0到n个答案的列表,如下所示:
<section>
<answer id="100">
<value>Something</value>
</answer>
...
</section>
xpath的方法有两种。
示例1:
extract(table.column, '//answer[@id=100]').getStringVal()
返回
<answer id="100">
<value>Something</value>
</answer>
示例2:
extractvalue(table.column, '//answer[@id=100]/value/text()')
返回
Something
在复杂查询中提取许多text()值的性能受到了冲击,这让我提出了以下问题。如果我使用像xstream这样的库来解析java中的那些值(示例1),或者让oracle为我解析这些值(示例2)会更好吗?
在我花时间重写大量的问题和疑问之前,我试图从其他人的经验或者一些白皮书中学习,所以任何事情都非常感谢,谢谢!
==================编辑
开始考虑使用Scala作为在JVM中解析xml的替代方法。随意添加Scala示例。
答案 0 :(得分:1)
我认为示例2应该更快。 如果您需要更多速度,我建议对此表进行规范化并摆脱XML或使用物化视图。
答案 1 :(得分:1)
我终于开始测试,这就是我找到的。
对于简单的&#34;报告&#34;使用表的jsp视图,我运行了一个查询来填充850行。
鉴于我的代码库,我首先按如下方式运行查询:
这总共花了:
8.27秒单独运行查询。
15秒总计从开始到完成视图
然后我改变了查询以执行以下操作:
这总共花了:
24.84秒单独运行查询。
60秒总计从开始到完成视图。
这当然是我的代码库,但我认为我可以排除使用XStream作为效率的平均值。但似乎XMLType和xpathing起初效率不高。