EXTRACTVALUE - XMLType查询延迟

时间:2012-12-20 11:58:45

标签: sql oracle plsql oracle10g

我有两个查询同样的解释简单:

1) select * from cfm_t_dmp;

2) SELECT CATEGORY_ID,
   STATUS,
   USERNAME,
   VALID_FROM,
   EXTRACTVALUE (
      XMLType (data_definition),
      '/customer/type/permissions/text()'),
   EXTRACTVALUE (
      XMLType (data_definition),
      '/bundle/configuration/permissions/text()'),
   AB_LOCK
FROM cfm_t_dmp

查询1)执行得非常快,查询2)我在分钟处理后没有看到结果。

主要区别在于extractvalue,我之前执行了查询2)并且它很快。

我可以以任何方式调整2)查询,或者这是数据库问题吗?

谢谢,

1 个答案:

答案 0 :(得分:1)

您的第二个查询速度较慢,因为Oracle必须在这些XPath上搜索您的XML类型。如果您有大量数据,或者XML内容很大,那么这将是一项额外的工作,并且会降低查询速度。

要加快速度:如果XPath不会更改,并且XML数据不会更改,您可以添加一个包含EXTRACTVALUE表达式结果的额外列。查询该数据会更快,因为您的查询不需要调用EXTRACTVALUE(因为它只会读取新列中的数据),但这需要您在插入或更新时预先填充它。

显然有可能在Oracle中对XML数据建立索引,虽然我自己从未尝试过这样做:http://docs.oracle.com/cd/B28359_01/appdev.111/b28369/xdb_indexing.htm虽然因为你没有测试值那些xpaths的条件,我不确定是否索引在这里会有所帮助。

相关问题