You might try the moving the @key reference out of the filter like this: fn:collection()/resource-bundle/resource/@key[. eq $key]/..[fn:lang($lang-code)]
Putting the attribute name in the filter sometimes doesn't allow the XPath to use an index for the query. Moving it to the path statement does. The query looks a little more awkward but it usually performs better. Try it. - Keith From: general-boun...@developer.marklogic.com [mailto:general-boun...@developer.marklogic.com] On Behalf Of seme...@hotmail.com Sent: Thursday, May 12, 2011 10:30 AM To: general@developer.marklogic.com Subject: Re: [MarkLogic Dev General] Why is cts:search so much faster than XPath? Here are some queries that are similar to the code I was talking about. XPath (0.04 secs) xquery version '1.0-ml'; let $key := "mykey" let $lang-code := "spa" return fn:collection()/resource-bundle/resource [@key = $key] [fn:lang($lang-code)] cts (0.015 sec) xquery version '1.0-ml'; let $key := "mykey" let $lang-code := "spa" return cts:search(fn:collection()/resource-bundle/resource, cts:element-attribute-value-query(xs:QName("resource"), xs:QName("key"), $key, "exact")) [fn:lang($lang-code)] The expression that takes the most time in the XPath version is "@key = $key". What I'm curious about is just what cts does so differently that the XPath engine doesn't, because I am noticing quite a disparity between them given the same data and same queries effectively (which is ok, I don't have an XPath problem, just wondering why the difference). -Ryan > From: kelly.stir...@marklogic.com<mailto:kelly.stir...@marklogic.com> > To: general@developer.marklogic.com<mailto:general@developer.marklogic.com> > Date: Thu, 12 May 2011 08:59:13 -0700 > Subject: [MarkLogic Dev General] Why is cts:search so much faster than XPath? > > Equivalent XPath and cts:search expressions should perform the same. Can you > share an example, and what version you are using? > > If they are equivalent and there is a performance difference, then there may > be a bug. > > Kelly > > Message: 5 > Date: Thu, 12 May 2011 09:05:16 -0600 > From: "seme...@hotmail.com<mailto:seme...@hotmail.com>" > <seme...@hotmail.com<mailto:seme...@hotmail.com>> > Subject: [MarkLogic Dev General] Why is cts:search so much faster than > XPath? > To: <general@developer.marklogic.com<mailto:general@developer.marklogic.com>> > Message-ID: > <snt121-w423bd38403eb7f1aded8d5b7...@phx.gbl<mailto:snt121-w423bd38403eb7f1aded8d5b7...@phx.gbl>> > Content-Type: text/plain; charset="iso-8859-1" > > > I wrote awhile ago that I thought it was usually best to use search:search > for full text searching, cts:search for node selection out of the db, and > XPath for node selection within a document. I just ran into a situation that > doing the same query for nodes in the DB using cts:search was 6 times faster > than using XPath. > > So what is it about cts:search that makes it so fast? I assume that there are > optimizations under the covers, but how is cts:search able to gain from the > optimizations but XPath is not? Just curious. > > -Ryan > _______________________________________________ > General mailing list > General@developer.marklogic.com<mailto:General@developer.marklogic.com> > http://developer.marklogic.com/mailman/listinfo/general NOTICE: This email message is for the sole use of the intended recipient(s) and may contain confidential and privileged information. Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the intended recipient, please contact the sender by reply email and destroy all copies of the original message.
_______________________________________________ General mailing list General@developer.marklogic.com http://developer.marklogic.com/mailman/listinfo/general