在Azure Cosmos DB(SQL API)中进行非常简单的查询的高请求费用

时间:2018-07-13 10:27:21

标签: azure-cosmosdb database-performance azure-cosmosdb-sqlapi

在Azure Cosmos DB(SQL API)中,以下查询收费 9356.66 RU's

SELECT * FROM Core c WHERE c.id = @id -- @id is a GUID

相反,以下更复杂的查询仅收取 6.84 RU

SELECT TOP 10 * FROM Core c WHERE c.type = "Agent"

两个示例中的文档都很小,具有少量属性。此外,文档集合不使用任何自定义索引策略。该集合包含105685个文档。

对我来说,这听起来好像在“ id”字段上没有正确的工作索引。

这怎么可能?如何解决?

更新

  • 如果没有TOP关键字,第二个查询将收取3516.35 RU,并返回100000条记录。
  • 分区键为“ / partition”,其值为0或1(均匀分布)。

2 个答案:

答案 0 :(得分:0)

如果您具有分区集合,则需要指定分区键,以便最有效地进行请求。在宇宙中,跨分区查询确实非常昂贵(并且速度较慢),因为分区数据可以存储在不同的位置。

尝试以下操作:

SELECT * FROM Core c WHERE c.id = @id AND c.partition = @partition

或者,如果您使用的是CosmosDB SDK,请在Feed选项中指定分区键。

如果有帮助,请告诉我。

答案 1 :(得分:0)

我认为解决方案与此处发布的相同: Azure DocumentDB Query by Id is very slow

一旦能够通过Microsoft支持进行验证,我将关闭自己的问题。