Cosmos Like Query 采取不同 RU/s

Cosmos Like Query taking different RU/s

我在 cosmos 中有一个由我创建的合成键分区的容器,该数据目前有大约 600 万个文档,合成键如下:

'InfantCereal-Fct-4WEApr2818' 其中各部分由破折号分隔,分别代表类别、类型和日期

我觉得奇怪的是,当我使用如下类似查询时,这些是我得到的结果:


SELECT * FROM c where c.Partition LIKE 'InfantCereal-%-4WEApr2818'

Request Charge
316.78 RUs (VERY HIGH)

-----------------------------------------------------

SELECT * FROM c where c.Partition LIKE 'InfantCereal-Fct-%'

Request Charge
17.41 RUs (VERY LOW)

-----------------------------------------------------

SELECT * FROM c where c.Partition LIKE '%-Fct-4WEApr2818'

Request Charge
297.25 RUs (VERY HIGH)

-----------------------------------------------------

SELECT * FROM c where c.Period = '4WE Apr 28 18' 
Request Charge
23.56 RUs

为什么在查询任何日期值时 RU/s 非常低?在这个容器中,日期差异会比类别和类型更多,但我不明白为什么 RU/s 成本如此之高

另外,为什么在 Period 上查询时(容器未在其上分区)成本比查询时 RU/s 少得多?

我是 Cosmos DB 的新手,我想确保在继续之前我在数据分区方面没有犯任何错误,感谢任何关于 Cosmos RU/Query 成本的解释。

谢谢!

您看到的行为似乎与索引可用于更高效查询的情况相对应。在 LIKE operator, it's noted that this is equivalent to using the system function RegexMatch. And in the RegexMatch docs 的文档中,底部隐藏了一条注释:

This system function will benefit from a range index if the regular expression can be broken down into either StartsWith, EndsWith, Contains, or StringEquals system functions.

这表明当您的查询可以针对其中一种情况进行优化时,您将节省成本。这与您记录的内容相符。

因此,如果您知道自己正在做其中一种情况,您可以考虑使用 STARTSWITH 之类的显式函数而不是 LIKE 来确保预期的索引处理,如果不是的话更加自我记录。