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

Azure cosmosdb Azure Cosmos DB(SQL API)中非常简单的查询的高请求费用,azure-cosmosdb,database-performance,azure-cosmosdb-sqlapi,Azure Cosmosdb,Database Performance,Azure Cosmosdb Sqlapi,在Azure Cosmos DB(SQL API)中,以下查询费用9356.66 RU: SELECT * FROM Core c WHERE c.id = @id -- @id is a GUID SELECT TOP 10 * FROM Core c WHERE c.type = "Agent" 相比之下,以下更复杂的查询费用仅为6.84 RU: SELECT * FROM Core c WHERE c.id = @id -- @id is a GUID SELECT TOP 10 *

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

SELECT * FROM Core c WHERE c.id = @id -- @id is a GUID
SELECT TOP 10 * FROM Core c WHERE c.type = "Agent"
相比之下,以下更复杂的查询费用仅为6.84 RU

SELECT * FROM Core c WHERE c.id = @id -- @id is a GUID
SELECT TOP 10 * FROM Core c WHERE c.type = "Agent"
两个示例中的文档都非常小,都有一些属性。此外,文档集合不使用任何自定义索引策略。该集合包含105685个文档

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

这是怎么可能的,又是怎么解决的

更新:

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

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

请尝试以下操作:

SELECT * FROM Core c WHERE c.id = @id AND c.partition = @partition
或者,如果您使用的是CosmosDB SDK,请在提要选项中指定分区键


如果有帮助,请告诉我。

我假设解决方案与此处发布的相同:


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

id
默认情况下有一个哈希索引。比较这两个查询是没有意义的,尽管其中一个查询仅限于
前10个
。您可以删除它并尝试不使用
TOP
关键字,费用是多少?请记住,RU/s不仅仅是查询复杂性,还涉及结果集的大小。另外,请提供有关集合是否已分区、分区键是什么等的更多信息。@Nick,谢谢-我更新了问题。如果你需要更多的信息,请告诉我。指定分区时,第一个查询现在只收取2.31卢比的费用。我只有两个分区(每个~50MiB),因此省略分区键不会导致9356.66这样高的查询费用,而2*2.31的请求费用在某种程度上是可以接受的。此外,对我来说,将分区键包含到查询中不是一个选项,因为这意味着应用程序必须为每个很难维护的外键保存分区信息…通过支持验证。您需要联系MS支持以解决此问题。