使用 EnableCrossPartitionQuery 设置 True 对特定集合进行 DocumentDB 搜索?
DocumentDB Search on specific collection using EnableCrossPartitionQuery set True?
我创建了一个分区键为 "/countryId" 的集合,因为当我使用 SQL 查询读取多个文档时,我指定了 FeedOptions { EnableCrossPartitionQuery = true } 并查询如下
select * from collection c where (c.countryId=1 or c.countryId=2 or c.countryId=3)
我想知道内部是怎么执行的,我是说
我在 where 条件下指定了 countryId(partitionKey),它会去那个特定的分区只为了获取文件吗?
或
它会去收集的所有分区并检查每个文档 countryId(partitionkey)
提前致谢!!
DocumentDB 查询将仅针对与过滤器匹配的分区执行,而不是所有分区:
- DocumentDB SDK/gateway 将检索集合的分区键元数据并知道分区键是
countryId
,以及物理分区,以及分区键哈希映射到的范围哪些物理分区。
- 在查询执行期间,SDK/gateway 将解析 SQL 查询并检测是否存在针对分区键的过滤器。它将散列值,根据其拥有的分区键范围找到匹配的分区。例如,国家 1、2 和 3 可能都在一个物理分区中,也可能是三个不同的分区。
- SDK/gateway 将根据配置的并行度以串行或并行方式执行查询。如果需要任何 post 处理,如 ORDER BY 或聚合,那么它将由 SDK/gateway 执行。
我创建了一个分区键为 "/countryId" 的集合,因为当我使用 SQL 查询读取多个文档时,我指定了 FeedOptions { EnableCrossPartitionQuery = true } 并查询如下
select * from collection c where (c.countryId=1 or c.countryId=2 or c.countryId=3)
我想知道内部是怎么执行的,我是说
我在 where 条件下指定了 countryId(partitionKey),它会去那个特定的分区只为了获取文件吗?
或
它会去收集的所有分区并检查每个文档 countryId(partitionkey)
提前致谢!!
DocumentDB 查询将仅针对与过滤器匹配的分区执行,而不是所有分区:
- DocumentDB SDK/gateway 将检索集合的分区键元数据并知道分区键是
countryId
,以及物理分区,以及分区键哈希映射到的范围哪些物理分区。 - 在查询执行期间,SDK/gateway 将解析 SQL 查询并检测是否存在针对分区键的过滤器。它将散列值,根据其拥有的分区键范围找到匹配的分区。例如,国家 1、2 和 3 可能都在一个物理分区中,也可能是三个不同的分区。
- SDK/gateway 将根据配置的并行度以串行或并行方式执行查询。如果需要任何 post 处理,如 ORDER BY 或聚合,那么它将由 SDK/gateway 执行。