Azure Cosmos DB中带ENDSWITH操作符的分层分区查询路由问题
问题
我在Azure Cosmos容器中配置了分层分区键,将id设为根分区键,userId设为分层分区键。现执行包含ENDSWITH操作符的如下查询,请问该查询是否会路由到单个逻辑分区和物理分区?
查询语句:
SELECT c.id, c.userId FROM c WHERE c.id = 'users' AND (ENDSWITH(c.userId,'60000000') OR ENDSWITH(c.userId,'7760000000'))
回答
- 逻辑分区:会路由到单个逻辑分区。因为查询中明确指定了根分区键
id的精确匹配条件c.id = 'users',Azure Cosmos里根分区键的取值直接定义逻辑分区——所有id='users'的文档都归属于同一个逻辑分区,对userId的ENDSWITH筛选只是在这个逻辑分区内部做的过滤,不会跨逻辑分区扫描。 - 物理分区:会路由到单个物理分区。逻辑分区是通过根分区键的哈希值映射到物理分区的,同一个根分区键值对应的逻辑分区只会存在于某一个物理分区中,所以这个查询只会被路由到承载
id='users'逻辑分区的那一个物理分区。
内容的提问来源于stack exchange,提问作者Sumchans
相关产品推荐
相关产品推荐

