高效的 XQuery 查询以确定元素不存在的文档
Efficient XQuery query to determine the documents where an element does NOT exist
假设我在这样的集合中有大约 5000 万条记录:
<record>
<some_data>
<some_data_id>112423425345235</some_data_id>
</some_data>
</record>
所以我可能有一百万条记录(坏数据)如下所示:
<record>
<some_data>
</some_data>
</record>
some_data 元素为空。
因此,如果我在 some_data_id 上设置了 element-range-index
,什么是高效的 XQuery 查询,它会给我所有要删除的空值?
我认为我正在寻找的查询不是 FLWOR 查询,您可以在其中检查每个元素的子记录是否存在,因为我认为这是低效的(即拉回数据然后过滤)?
而如果我在 cts:search
查询中这样做,那么它会更有效率,就像在将数据拉回之前过滤数据一样?
请编写一个可以高效执行此操作的查询,并确认我对 FLWOR 语句的假设是否正确。
我认为您不需要范围索引来高效地执行此操作。通过 cts:query
构造函数使用 "universal" 元素索引应该没问题:
cts:element-query(xs:QName('record'),
cts:element-query(xs:QName('some_data'),
cts:not-query(cts:element-query(xs:QName('some_data_id'), cts:and-query(())))
)
)
假设我在这样的集合中有大约 5000 万条记录:
<record>
<some_data>
<some_data_id>112423425345235</some_data_id>
</some_data>
</record>
所以我可能有一百万条记录(坏数据)如下所示:
<record>
<some_data>
</some_data>
</record>
some_data 元素为空。
因此,如果我在 some_data_id 上设置了 element-range-index
,什么是高效的 XQuery 查询,它会给我所有要删除的空值?
我认为我正在寻找的查询不是 FLWOR 查询,您可以在其中检查每个元素的子记录是否存在,因为我认为这是低效的(即拉回数据然后过滤)?
而如果我在 cts:search
查询中这样做,那么它会更有效率,就像在将数据拉回之前过滤数据一样?
请编写一个可以高效执行此操作的查询,并确认我对 FLWOR 语句的假设是否正确。
我认为您不需要范围索引来高效地执行此操作。通过 cts:query
构造函数使用 "universal" 元素索引应该没问题:
cts:element-query(xs:QName('record'),
cts:element-query(xs:QName('some_data'),
cts:not-query(cts:element-query(xs:QName('some_data_id'), cts:and-query(())))
)
)