Xml XQuery/Xpath优化:查询同一文档的不同部分

Xml XQuery/Xpath优化:查询同一文档的不同部分,xml,xpath,xquery,exist-db,Xml,Xpath,Xquery,Exist Db,假设我们有不同部分的XML文件:标题,说明,文本,注释 <book> <title>Some title</title> <description>Some description</description> <text>Some texte</text> <note>Some note</note> </book> 方法2(以本方法为例) 方

假设我们有不同部分的XML文件:
标题
说明
文本
注释

<book>
    <title>Some title</title>
    <description>Some description</description>
    <text>Some texte</text>
    <note>Some note</note>
</book>
方法2(以本方法为例)

方法3(这一方法似乎是由


<> >阅读后,<强>我想知道这些方法中的哪一种在大型集合中执行效率高/速度快(有100个以上的文件)?>/P>> P>我认为当编写存在DB的表达式时,要考虑所有相关的方面,例如避免不必要的嵌套过滤器,首选XPath谓词而不是
where
表达式,使用
groupby
,构造一次初始节点集,并在查询多个集合时将其用作主表达式的输入

似乎建议使用第三种方法,因为它遵循建议,在查询之前构造初始节点集

然而,方法2似乎通过仅依赖XPath来解决这个问题;这可能会更好


最后,它取决于您的输入数据和优化器的实现细节。遵循一般建议和常识(例如,避免嵌套循环等)在大多数情况下都会有所帮助,但在关键情况下,可能仍然需要运行测试并找出在给定场景中最有效的方法。

谢谢您的回答。我认为对于这种查询有一些XQuery“最佳实践”。最后,通常有很多“最佳”方法,都是关于在我的特殊情况下什么最有效。我得到了它!
for $result in (
    collection("path_to_my_collection")//title[ft:query(., "'word_to_search'")]
    , 
    collection("path_to_my_collection")//note[ft:query(., "'word_to_search'")]
    ) 
for $result in collection("path_to_my_collection")//(title | note)[ft:query(., "'word_to_search'")]
let $docs_and_parts :=
    for $parts in (collection("path_to_my_collection")//title, collection("path_to_my_collection")//note) 
    return 
        $parts
        
for $result in $docs_and_parts[ft:query(., "'word_to_search'")]