故事的背景是:我有一个Oracle数据库,其中有一个表存储XML列中的数据。我还创建了一个视图,以更可读的sql方式从XML表中读取数据。该视图具有(重要部分):guid, parent_guid, is_active, is_deleted, xmlcol
。现在我想选择一个层次结构并使用视图执行SYS_XMLAGG:
SELECT SYS_XMLAGG(v.xmlcol, XMLFormat('return'))
FROM xml_view v
WHERE is_active=true AND is_deleted=false
STARTS WITH v.guid=[given_guid_here]
AND v.is_active=true AND v.is_deleted=false
CONNECT BY v.parent_guid=PRIOR v.guid AND v.is_active=true AND v.is_deleted=false
但查询太慢了 - 获得172条记录大约需要120秒。类似查询使用
与此相比,XMLTABLE几乎立即工作。
视图上的列被编入索引(guid,父guid,活动,已删除)。当我执行SELECT xmlcol (...)
时它也很慢,但当我SELECT guid (...)
时(使用上述查询,只更改我选择的内容),它通常会很快。 xmlcol与使用CONNECT BY PRIOR选择层次结构之间的问题是什么?
您对该查询有其他选择吗?我需要使用视图,而不是XMLTABLE。