С помощью Optic API вы можете выразить три условия, используя несколько предложений op:where или вложив op:and s.Рассматривая планы, первый подход использует несколько операторов FILTER, а второй AND ставит условия в одном операторе FILTER.Есть ли разница в эффективности между ними?
op:where
op:and
FILTER
Запрос:
op:from-view("stuff", "table") => op:where($cond1) => op:where($cond2) => op:where($cond3)
План (переформатирован для разборчивости):
<map:entry key="_plan"> <map:value xsi:type="plan:query" xmlns:plan="http://marklogic.com/plan"> plan:sparql( "{ SELECT field1 field2 field3 { <http://marklogic.com/templateview> . } } FILTER (field1 eq Q{http://www.w3.org/2001/XMLSchema}string("value1")) FILTER (field2 eq Q{http://www.w3.org/2001/XMLSchema}string("value2")) FILTER (field3 eq Q{http://www.w3.org/2001/XMLSchema}string("value3"))" ) </map:value> </map:entry>
op:from-view("stuff", "table") => op:where(op:and(op:and($cond1, $cond2), $cond3))
План:
<map:entry key="_plan"> <map:value xsi:type="plan:query" xmlns:plan="http://marklogic.com/plan"> plan:sparql( "{ SELECT field1 field2 field3 { <http://marklogic.com/templateview> . } } FILTER ( field1 eq Q{http://www.w3.org/2001/XMLSchema}string("value1") and field2 eq Q{http://www.w3.org/2001/XMLSchema}string("value2") and field3 eq Q{http://www.w3.org/2001/XMLSchema}string("value3") )" ) </map:value> </map:entry>
Они будут вести себя одинаково - нет причин выбирать одно над другим.