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
来确保预期的索引处理,如果不是的话更加自我记录。
我在 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
来确保预期的索引处理,如果不是的话更加自我记录。