【发布时间】:2020-10-03 12:50:32
【问题描述】:
我想针对消耗的 RU 优化我的 Azure Cosmos DB SQL API 查询(部分是为了减少 429 响应的频率)。
具体来说,我认为在 WHERE 子句中包含分区键会减少消耗的 RU(例如,我阅读了 https://docs.microsoft.com/en-us/azure/cosmos-db/optimize-cost-queries 和 https://docs.microsoft.com/en-us/azure/cosmos-db/partitioning-overview 这让我想到了这一点)。
但是,当我跑步时
SELECT TOP 1 *
FROM c
WHERE c.Field = "some value"
AND c.PartitionKeyField = "1234"
ORDER BY c.TimeStampField DESC
它消耗 6 个 RU。
而没有分区键,例如
SELECT TOP 1 *
FROM c
WHERE c.Field = "some value"
ORDER BY c.TimeStampField DESC
它消耗 5.76 个 RU - 即更便宜。
(虽然上述数字会根据所选的确切文档有所不同,但第二个查询总是更便宜,而且我已经针对最小和最大分区进行了测试。)
我的数据库目前有大约 400,000 个文档和 29 个分区(预计两者都会增长)。最大的分区有大约 150,000 个文档(不太可能进一步增长)。
以上结果告诉我,我不应该在 WHERE 子句中为此查询传递分区键。请问有人能解释一下为什么会这样吗?从我认为相反的文档来看应该是正确的?
【问题讨论】:
标签: azure azure-cosmosdb partitioning azure-cosmosdb-sqlapi