在以下两个查询中,性能差异将有多大。
备选案文1-
cts:search(fn:doc(),
cts:and-query((
cts:collection-query('xyz'),
cts:element-value-query(xs:QName('test'),'12344')
))
)选项2-特定节点
cts:search(/root-node,
cts:and-query((
cts:collection-query('xyz'),
cts:element-value-query(xs:QName('test'),'12344')
))
)PS: DB中还有许多其他集合。
请引导我。哪个更适合使用,在Marklogic中是如何工作的?
发布于 2022-05-30 12:52:58
如果不知道数据库的大小和有多少文档具有/root-node,以及有多少文档与其他查询条件匹配,就很难知道两者之间的区别。
如果集合和元素值的查询条件足够具体,以至于不需要/root-node条件,那么使用第一个条件可能更容易,性能也更好。
通过使用xdmp:plan()包装搜索以查看查询条件是什么,您可以看到生成的查询计划中的差异。为第一个参数应用路径表达式将包括一些附加的术语查询条件,以将root-node作为文档的根元素的文档作为目标,这些文档如下所示:
<qry:or-two-queries>
<qry:term-query weight="0">
<qry:key>2975665039653361017</qry:key>
<qry:annotation>doc-root(element(root-node),doc-kind(document))</qry:annotation>
</qry:term-query>
<qry:term-query weight="0">
<qry:key>6481445092305598577</qry:key>
<qry:annotation>link-child(descendant(doc-root(element(root-node),doc-kind(document))))</qry:annotation>
</qry:term-query>
</qry:or-two-queries>我怀疑您可能不会看到这两个查询之间的巨大差异,但最好是测试和测量。
https://stackoverflow.com/questions/72433567
复制相似问题