[英]In cts:search using fn:doc() vs specific node in query
在以下 2 个查询中,性能差异有多大。
选项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 中是如何工作的?
如果不知道数据库的大小以及有多少文档具有/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>
我怀疑您可能不会看到这两个查询之间的巨大差异,但最好始终进行测试和测量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.