簡體   English   中英

Azure Cosmos DB - 為查詢提供分區鍵的方式有何不同?

[英]Azure Cosmos DB - difference in how the partition key is supplied to query?

我正在從我的 .NET Core 應用程序查詢 Cosmos DB 集合。 現在我想知道,我如何向查詢提供分區鍵是否有任何區別(即:最好以一種方式與另一種方式進行)?

下面, region是我的分區鍵。

一種)

var queryString = $"SELECT TOP 100 * FROM c WHERE c.region ='{region}'";
var query = this.container.GetItemQueryIterator<Item>(new QueryDefinition(queryString));

b)

var queryString = "SELECT TOP 100 * FROM c";
var query = this.container.GetItemQueryIterator<Item>(new QueryDefinition(queryString), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey(region) });

至少 RU(請求單元)似乎是相同的,所以也許 Cosmos DB 內部無論如何都會優化查詢並將 a) 重寫為 b),反之亦然?!

當您將分區鍵指定為查詢的一部分時,Cosmos 會將查詢路由到指定的分區,從而提高執行效率。

你可以在你在你的問題表明這兩種方式將其添加到WHERE子句指定分區鍵,無論是在這篇文章中描述的,或可以明確指定使用分區鍵QueryRequestOptions

在后台,數據庫引擎將以相同的方式處理這兩者,並且查詢將直接針對您指定的分區執行,因此兩者的 RU 成本應該相似。

唯一真正的區別是,在某些情況下,您使用的 API 的客戶端 SDK 可能要求您使用 QueryRequestOptions 指定分區鍵或使用相關屬性啟用跨分區查詢。 在這種情況下,出於性能原因,您肯定要指定分區鍵。

是,有一點不同。

根據文檔和最佳實踐,第二個是編寫查詢的首選方式,因為 CosmosDB SDK 本身知道分區鍵,而第一個傾向於創建不必要的交叉分區。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM