Oracle xpath的性能:两个选择方案

时间:2011-10-10 19:47:17

标签: java performance oracle xpath xstream

我正在使用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示例。

2 个答案:

答案 0 :(得分:1)

我认为示例2应该更快。 如果您需要更多速度,我建议对此表进行规范化并摆脱XML或使用物化视图。

答案 1 :(得分:1)

我终于开始测试,这就是我找到的。

对于简单的&#34;报告&#34;使用表的jsp视图,我运行了一个查询来填充850行。

鉴于我的代码库,我首先按如下方式运行查询:

  • 查询在每个记录的XMLTypes上包含3个左连接。
  • 每个记录提取15&#34;示例2&#34;值。
  • 每个值都不需要XStream处理。

这总共花了:

  

8.27秒单独运行查询。

     

15秒总计从开始到完成视图

然后我改变了查询以执行以下操作:

  • 查询在每个记录的XMLTypes上包含3个左连接。
  • 每个记录提取15&#34;示例1&#34;值。
  • 每个值也运行XStream处理以提取值。

这总共花了:

  

24.84秒单独运行查询。

     

60秒总计从开始到完成视图。

这当然是我的代码库,但我认为我可以排除使用XStream作为效率的平均值。但似乎XMLType和xpathing起初效率不高。