不区分大小写搜索的高 RU 费用

High RU charge with case-insensitive search

我有一个包含 400 万个文档 (~5GB) 的 Cosmos DB 集合。以下查询报告 2.79 RU 的费用:

SELECT * FROM c WHERE c.type='type1' and STRINGEQUALS(c.name,'abc',false)

但使用不区分大小写的搜索(通过将 false 替换为 true)的相同查询成本 1228 RUs.

是否可以解释为什么不区分大小写的查询比区分大小写的查询贵 470 多倍?我对此感到惊讶,因为 documentation 状态

The RU charge for StartsWith and StringEquals is slightly higher with the case-insensitive option than without it.


详情:

这是我目前发现的:

Cosmos DB 是否支持高效的不区分大小写的字符串比较?

不幸的是,不区分大小写 STRINGEQUALS 的 RU 费用在 属性 的基数中似乎是 线性 (即不同值的数量为此 属性)。如果您有很多文档,那真的非常糟糕。上面的查询在 10,000 RU/s 的吞吐量下花费了将近 1 秒。相反,区分大小写 字符串比较与集合的大小无关。另请参阅 this 讨论。

如果我需要高效的不区分大小写的字符串比较怎么办?

对于小型集合(< 10,000 个文档)区分大小写不会产生太大影响。 (当然,如果分区键的包含将潜在结果集的大小限制为更小的数字。)

对于较大的集合,您可以存储每个 属性 的副本,这些 属性 应该支持小写的高效不区分大小写的搜索,而对小写的 属性 进行区分大小写的搜索。

您可以投票支持功能请求以支持高效的不区分大小写的查询here