[英]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.