为什么 CosmosDB 中的 COUNT 比列出实际文档更昂贵?

问题描述 投票:0回答:1

我尝试了这样的查询:

SELECT VALUE COUNT(1) FROM c WHERE <a few equality conditions and a 'date greater than' condition>

在分区集合上(跨分区查询)。

我也尝试过

SELECT * FROM c WHERE <same conditions>

令我惊讶的是,

SELECT *
版本的成本低于
SELECT VALUE COUNT(1)
:

  • 对于 1 个返回的文档:17 RU vs 21 RU
  • 对于 45 个返回的文档:22 RU 与 460 RU !!

有谁能解释为什么会发生这种情况吗?

azure-cosmosdb
1个回答
0
投票

虽然这是一个非常古老的问题,但仍然添加这个答案,以防有人来这里搜索。

我也面临同样的问题

select count(1) FROM c WHERE <same conditions>
select count(*) FROM c WHERE <same conditions>
select count(c.id) FROM c WHERE <same conditions>
都采取了比做更多的RU
select * FROM c WHERE <same conditions>

对此有 2 个解决方案(我们通过点击和试用以及与 Cosmos Db 支持团队的多次电子邮件交流发现)

  1. 使用
    select top 1 c.id FROM c WHERE <same conditions>
    并更改代码以将其用作二进制输出
  2. 使用在 where 子句和 select count 字段中都建立索引的内容。例如
    select count(c.indexedField) from c where c.indexedField = "xyz"

Cosmos DB 团队提到他们正在修复它,因此将来我们可能不需要自己进行此优化。我希望他们在文档中的某个地方提到过它。

© www.soinside.com 2019 - 2024. All rights reserved.