1

我有两个具有相同解释的查询:

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) 经过几分钟的处理后我看不到结果。

主要区别是提取值,我之前执行了查询 2),它很快。

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

谢谢,

4

1 回答 1

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 的值上测试条件,我不确定索引是否会有所帮助。

于 2012-12-20T15:43:03.007 回答