xdmp:estimate runs unfiltered as well, so unless /book matches root fragments, both Dave's suggestions should be equally accurate afaik..
Cheers, Geert Van: [email protected] [mailto:[email protected]] Namens Dave Cassel Verzonden: dinsdag 11 maart 2014 12:37 Aan: MarkLogic Developer Discussion Onderwerp: Re: [MarkLogic Dev General] Reg:Performance comparison for cts:search and cts:uris To expand on David's suggestion a bit, running this: xdmp:estimate( cts:search( /book, cts:and-query(( cts:element-value-query(xs:QName("title"),"New Book"), cts:element-value-query(xs:QName("price"),"100"), cts:directory-query("/localhost/") ))) ) and this: fn:count( cts:uris( '', (), cts:and-query(( cts:element-value-query(xs:QName("title"),"New Book"), cts:element-value-query(xs:QName("price"),"100"), cts:directory-query("/localhost/") ))) ) will both give results based on index resolution. (Understanding the Search Process <https://docs.marklogic.com/guide/performance/unfiltered#id_13165> ) The query passed to cts:uris() <https://docs.marklogic.com/cts:uris#query> is always evaluated unfiltered. At a glance, it looks like the only way that xdmp:estimate <https://docs.marklogic.com/xdmp:estimate> might give you inaccurate results is based on the first parameter to cts:search(), the /book. If you changed that to fn:doc(), then the two queries above would be equivalent but I'd expect xdmp:estimate() to run a lot faster. (I believe the universal index will make the rest of the query accurate; someone please correct me if I'm wrong.) -- Dave Cassel Vanguard Technical Manager MarkLogic Corporation <http://www.marklogic.com/> Cell: +1-484-798-8720 From: David Ennis <[email protected]> Reply-To: MarkLogic Developer Discussion <[email protected]> Date: Tuesday, March 11, 2014 at 4:33 AM To: MarkLogic Developer Discussion <[email protected]> Subject: Re: [MarkLogic Dev General] Reg:Performance comparison for cts:search and cts:uris Hi. Do you need the exact number? If not, then the solution with the best performance is actually xdmp:estimate. This uses indexes and is not only bazillions of times faster, but does not require the memory you need in your samples. You can find documentation about the differences of fn:count and xdmp:estimate on MarkLogic's website and decide which is better for which use. As for you example, fn:count always counts what it is given. for your example, it is likely faster because cts-uris gives back less information and everything it gives back is in an index. the search may very well be reading abd returning every result. larger result and possibly more disk reads (And unpacking the packed data). Kind Regards, David Ennis On 11 March 2014 10:25, priya dharshni <[email protected]> wrote: Hi, We are having millions of records in db.Now i want to query the entire database based on few filters.For example, i am having "/test/book1.xml","/test/book2.xml","/test/book3.xml" ... "/test/bookn.xml" <book> <title>New Book</title> <Author>Auth X</Author> <price>100</price> </book> Now i have to fetch the count of uris whose title is "New Book" and price=100.I tried with cts:search and cts:uris which gives me the same result. But i would like to know on performance side which is the best approach. count(cts:search(/book,cts:and-query((cts:element-value-query(xs:QName("titl e"),"New Book"),cts:element-value-query(xs:QName("price"),"100") ,cts:directory-query("/localhost/") ))) ) count(cts:uris('',(),cts:and-query((cts:element-value-query(xs:QName("title" ),"New Book"),cts:element-value-query(xs:QName("price"),"100") ,cts:directory-query("/localhost/") ))) ) In profiling i found the number expression executed for cts:uris is less.Please suggest which is the best approach when we apply the cts:document-query,cts:and-query . _______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general
_______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general
