Cosmos DB中/PartitionKey/*与/PartitionKey索引路径的差异咨询
Azure Cosmos DB 索引路径
/PartitionKey/* 与 /PartitionKey 的差异 匹配范围不一样
/PartitionKey/*:会把PartitionKey字段下的所有子属性都纳入索引。举个例子,要是你的文档是{"PartitionKey": {"a": 1, "b": "test"}},那a和b这两个子属性都会被索引到。/PartitionKey:只索引PartitionKey字段本身。如果PartitionKey是嵌套对象,只会索引整个对象的哈希值,不会管它的子属性;要是PartitionKey是字符串、数字这类简单类型,就直接索引这个值。
查询支持有区别
- 用
/PartitionKey/*的话,你能直接针对PartitionKey的子属性做过滤、排序这类查询,比如写SELECT * FROM c WHERE c.PartitionKey.a = 1,这类查询能靠索引提速。 - 用
/PartitionKey的话,要是PartitionKey是嵌套对象,查它的子属性(比如c.PartitionKey.a = 1)就没法用索引,会变成全集合扫描;只有直接查PartitionKey本身(比如c.PartitionKey = {"a":1, "b":"test"})才能用上索引。如果PartitionKey是简单类型,那查这个字段本身时两者没差别。
- 用
索引存储开销不同
/PartitionKey/*会生成更多索引条目,因为要覆盖所有子属性,所以存储成本相对高一些。/PartitionKey只索引字段本身,存储开销更低,尤其是当PartitionKey有一大堆子属性的时候。
内容的提问来源于stack exchange,提问作者MaxP
相关产品推荐
相关产品推荐

