Sql EXTRACTVALUE-XMLType查询延迟

Sql EXTRACTVALUE-XMLType查询延迟,sql,oracle,plsql,oracle10g,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),

我有两个相同的问题:

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

主要的区别是提取值,我以前执行过查询,查询速度很快

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


谢谢,

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

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


显然,在Oracle中对XML数据进行索引也是可能的,尽管我自己从未尝试过:虽然您没有测试这些XPath的值的条件,但我不确定索引是否有帮助。

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

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


显然,在Oracle中对XML数据进行索引也是可能的,尽管我自己从未尝试过:虽然您没有测试这些XPath的值的条件,但我不确定索引是否有帮助。

数据定义列的类型是什么?如果是CLOB,您可能希望尝试将其更改为XMLTYPE并从select语句中删除强制转换。是的,它是CLOB。但是查询在CLOB之前是有效的。在CLOB之前是有效的吗?你改变了什么使它不能工作?“工作”。。。返回值为几秒。可能问题与数据CLOB有关,存储在不同的表空间中。对不起,我仍然不知道“以前工作”是什么意思。那是在你增加价值之前吗?或者查询在其当前状态下是否正常工作,并且在您未做任何更改的情况下突然停止工作?
data\u definition
列的类型是什么?如果是CLOB,您可能希望尝试将其更改为XMLTYPE并从select语句中删除强制转换。是的,它是CLOB。但是查询在CLOB之前是有效的。在CLOB之前是有效的吗?你改变了什么使它不能工作?“工作”。。。返回值为几秒。可能问题与数据CLOB有关,存储在不同的表空间中。对不起,我仍然不知道“以前工作”是什么意思。那是在你增加价值之前吗?或者查询在其当前状态下是否正常工作,并且在您未做任何更改的情况下突然停止工作?