假设我在这样的集合中有大约 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 构造函数使用“通用”元素索引应该没问题:
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(())))
)
)
关于xquery - 高效的 XQuery 查询来确定不存在元素的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32101375/