我打算使用Cosmos Db(文档Db),我试图了解查询,索引和分区如何相互关联。
How to partition and scale in Azure Cosmos Db谈到分区键和其他文档表明分区键+ id =文档的唯一ID。但是后来SQL Query and SQL syntax in Azure Cosmos Db说它提供了JSON文档的自动索引,而不需要显式模式或创建二级索引。
我知道分区键对于可伸缩性以及数据的存储方式非常重要。但是,如果我们考虑搜索是分区键类似额外的filter / where子句?所有文档都被编入索引,因此我可以执行以下查询:
SELECT *
FROM Families
WHERE Families.address.state = "NY"
在使用此SQL查询语法时,是否仍应指定分区键或指示允许跨分区查询的方式?
答案 0 :(得分:5)
您的第一个链接为此提供了答案:
对于分区集合,您可以使用PartitionKey对单个分区运行查询(尽管Cosmos DB可以从查询文本中自动提取),而EnableCrossPartitionQuery可以运行可能需要针对多个分区运行的查询。
所以,是的,你需要指定WHERE
子句,它将使查询针对单个分区运行,或者在查询选项中将EnableCrossPartitionQuery
设置为true
。
答案 1 :(得分:0)
您不必再这样做了,EnableCrossPartitionQuery
现在默认设置为 true
。这意味着如果您不跳过查询中的分区键,Cosmos 不会抱怨。
更多信息here。