5

在 Azure Cosmos DB (SQL API) 中,以下查询收取9356.66 RU 的费用:

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(均匀分布)。
4

2 回答 2

1

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

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

于 2018-07-16T20:21:05.810 回答
1

如果您有分区集合,如果您想最有效地执行请求,则需要指定分区键。跨分区查询在 cosmos 中确实很昂贵(而且速度较慢),因为分区数据可以存储在不同的地方。

尝试以下操作:

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

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

让我知道,如果这有帮助。

于 2018-07-13T20:27:49.020 回答