I can see the difference in time taken by CTS Range vs SPARQL Query
.
CTS Range Query - took 0.8ms to get the result, required field indexes are created to make filed query work.
cts:field-values("productid", (), (), cts:and-query(
(
cts:field-value-query("countryCode", "us", ("unstemmed","case-insensitive", "whitespace-insensitive", "punctuation-insensitive", "diacritic-insensitive")),
cts:field-value-query("status", "published", ("unstemmed","case-insensitive", "whitespace-insensitive", "punctuation-insensitive", "diacritic-insensitive"))
)
))
SPARQL Query - took 18ms to get the result, TDE is created to make SPARQL query work.
## query
SELECT ?productid
FROM <product>
WHERE {
?productid <status> <Published>;
<countryCode> <US>.
}
TDE for product-
<?xml version="1.0" encoding="UTF-8"?>
<template xmlns="http://marklogic.com/xdmp/tde">
<context>product</context>
<enabled>true</enabled>
<collections>
<collection>product</collection>
</collections>
<triples>
<triple>
<subject>
<val>sem:iri(productid)</val>
<invalid-values>ignore</invalid-values>
</subject>
<predicate>
<val>sem:iri(xs:string("languageCode"))</val>
<invalid-values>ignore</invalid-values>
</predicate>
<object>
<val>sem:iri(languageCode)</val>
<invalid-values>ignore</invalid-values>
</object>
</triple>
<triple>
<subject>
<val>sem:iri(productid)</val>
<invalid-values>ignore</invalid-values>
</subject>
<predicate>
<val>sem:iri(xs:string("countryCode"))</val>
<invalid-values>ignore</invalid-values>
</predicate>
<object>
<val>sem:iri(fn:normalize-space(xs:string(countryCode)))</val>
<invalid-values>ignore</invalid-values>
</object>
</triple>
<triple>
<subject>
<val>sem:iri(productid)</val>
<invalid-values>ignore</invalid-values>
</subject>
<predicate>
<val>sem:iri(xs:string("status"))</val>
<invalid-values>ignore</invalid-values>
</predicate>
<object>
<val>sem:iri(fn:normalize-space(xs:string(status)))</val>
<invalid-values>ignore</invalid-values>
</object>
</triple>
<triple>
<subject>
<val>sem:iri(productid)</val>
<invalid-values>ignore</invalid-values>
</subject>
<predicate>
<val>sem:iri(xs:string("created"))</val>
<invalid-values>ignore</invalid-values>
</predicate>
<object>
<val>sem:iri(audit/created)</val>
<invalid-values>ignore</invalid-values>
</object>
</triple>
<triple>
<subject>
<val>sem:iri(productid)</val>
<invalid-values>ignore</invalid-values>
</subject>
<predicate>
<val>sem:iri(xs:string("createdBy"))</val>
<invalid-values>ignore</invalid-values>
</predicate>
<object>
<val>sem:iri(audit/createdBy)</val>
<invalid-values>ignore</invalid-values>
</object>
</triple>
<triple>
<subject>
<val>sem:iri(productid)</val>
<invalid-values>ignore</invalid-values>
</subject>
<predicate>
<val>sem:iri(xs:string("updated"))</val>
<invalid-values>ignore</invalid-values>
</predicate>
<object>
<val>sem:iri(audit/updated)</val>
<invalid-values>ignore</invalid-values>
</object>
</triple>
<triple>
<subject>
<val>sem:iri(productid)</val>
<invalid-values>ignore</invalid-values>
</subject>
<predicate>
<val>sem:iri(xs:string("updatedBy"))</val>
<invalid-values>ignore</invalid-values>
</predicate>
<object>
<val>sem:iri(audit/updatedBy)</val>
<invalid-values>ignore</invalid-values>
</object>
</triple>
</triples>
</template>
Please help me to undestand, why there is speed/perofmance difference between these two types of queries ?
Any help is appreciated.