我有两个带有相同解释的查询:
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),它很快。
我可以以任何方式调优查询吗?或者这是一个数据库问题?
谢谢,
发布于 2012-12-20 23:43:03
您的第二个查询比较慢,因为Oracle必须在这些XPaths上搜索您的XML类型。如果您有大量的数据,或者如果XML内容很大,那么这将是大量的额外工作,并且会减慢查询速度。
为了加快速度:如果XPaths不会更改,并且XML数据也不会更改,那么可以添加一个包含EXTRACTVALUE表达式结果的额外列。查询这些数据会更快,因为您的查询不需要调用EXTRACTVALUE (因为它只会读取新列中的数据),但这需要您在插入或更新时预先填充它。
显然,在Oracle中对XML数据进行索引也是可能的,尽管我自己从未尝试过:http://docs.oracle.com/cd/B28359_01/appdev.111/b28369/xdb_indexing.htm尽管您并没有对这些xpath上的值测试条件,因此我不确定索引在这里是否有帮助。
https://stackoverflow.com/questions/13971718
复制相似问题