op: и против нескольких op: where - PullRequest
2 голосов
/ 05 июня 2019

С помощью Optic API вы можете выразить три условия, используя несколько предложений op:where или вложив op:and s.Рассматривая планы, первый подход использует несколько операторов FILTER, а второй 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(&quot;value1&quot;)) 
         FILTER (field2 eq Q{http://www.w3.org/2001/XMLSchema}string(&quot;value2&quot;)) 
         FILTER (field3 eq Q{http://www.w3.org/2001/XMLSchema}string(&quot;value3&quot;))"
    )
  </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(&quot;value1&quot;) and 
           field2 eq Q{http://www.w3.org/2001/XMLSchema}string(&quot;value2&quot;) and 
           field3 eq Q{http://www.w3.org/2001/XMLSchema}string(&quot;value3&quot;)
         )"
    )
  </map:value>
</map:entry>

1 Ответ

1 голос
/ 12 июля 2019

Они будут вести себя одинаково - нет причин выбирать одно над другим.

...