Как представление Marklogic TDE выполняет соединения между двумя представлениями
Я создал два простых шаблона TDE с одним столбцом объединения.Я могу выполнить select
запрос с объединением, и он отлично работает.Мой вопрос заключается в том, какое соединение на самом деле выполняется в базе данных MarkLogic?Делает ли он полное сканирование документов, которое станет узким местом, когда объем данных увеличится?
xquery version "1.0-ml";
import module namespace tde = "http://marklogic.com/xdmp/tde" at "/MarkLogic/tde.xqy";
let $emp1 := <employee><id>100</id><name>john</name><dept>10</dept></employee>
let $emp2 := <employee><id>200</id><name>mary</name><dept>10</dept></employee>
let $dept1 := <dept><id>10</id><name>accounting</name></dept>
let $dept2 := <dept><id>20</id><name>hr</name></dept>
let $emp-table := <template xmlns="http://marklogic.com/xdmp/tde">
<context>/employee</context>
<rows>
<row>
<schema-name>models</schema-name>
<view-name>employees</view-name>
<columns>
<column>
<name>id</name>
<scalar-type>string</scalar-type>
<val>id</val>
</column>
<column>
<name>name</name>
<scalar-type>string</scalar-type>
<val>name</val>
</column>
<column>
<name>dept</name>
<scalar-type>string</scalar-type>
<val>dept</val>
</column>
</columns>
</row>
</rows>
</template>
let $dept-table := <template xmlns="http://marklogic.com/xdmp/tde">
<context>/dept</context>
<rows>
<row>
<schema-name>models</schema-name>
<view-name>depts</view-name>
<columns>
<column>
<name>id</name>
<scalar-type>string</scalar-type>
<val>id</val>
</column>
<column>
<name>name</name>
<scalar-type>string</scalar-type>
<val>name</val>
</column>
</columns>
</row>
</rows>
</template>
return (
xdmp:document-insert('/employees/100.xml', $emp1),
xdmp:document-insert('/employees/200.xml', $emp2),
xdmp:document-insert('/depts/10.xml', $dept1),
xdmp:document-insert('/depts/20.xml', $dept2),
tde:template-insert('/templates/emp.xml', $emp-table),
tde:template-insert('/templates/dept.xml', $dept-table)
)
Тогда
select employees.name, depts.name from employees, depts where employees.dept = depts.id
Селект прекрасно работает.
Мой вопрос: что происходит под капотами?Это делает эквивалент HashJoin или полное сканирование таблицы?Каковы будут последствия, если количество документов увеличится до миллионов и миллиардов?