如果我们已经将分区键设置为FeedOption,则查询中是否应该包含分区键?

时间:2018-08-28 04:24:04

标签: performance linq azure-cosmosdb

我正在使用文档DB,分区键=“ deviceId”。 下面的2个代码之间有什么区别:

var fo = new FeedOption{ PartitionKey= new PartitionKey("A1234") };
var partitionKeyInQuery= dbClient.CreateDocumentQuery(d => d.deviceId = "A1234" and d.type==1, fo);
var noPartitionKeyInQuery = dbClient.CreateDocumentQuery(d => d.type==1, fo);

在FeedOption中应用PartitionKey时,应该在WHERE子句中添加“ deviceId”吗?

1 个答案:

答案 0 :(得分:2)

我相信在性能上没有区别。 RequestCharge相同,而where子句使查询分区特定,即消除了跨分区查询。

从文档中:

查询分区的容器

当您查询分区容器中的数据时,Cosmos DB会自动将查询路由到与过滤器中指定的分区键值(如果有)相对应的分区。例如,此查询仅路由到包含分区键“ XMS-0001”的分区。

// Query using partition key
IQueryable<DeviceReading> query = client.CreateDocumentQuery<DeviceReading>(
    UriFactory.CreateDocumentCollectionUri("db", "coll"))
    .Where(m => m.MetricType == "Temperature" && m.DeviceId == "XMS-0001");

https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-partition-data