首页 > 解决方案 > cosmos db sql api datetimepart 函数增加 rus

问题描述

我的 cosmos db 存储了每分钟时间间隔的数据,我想根据开始日期和结束日期使用不同的间隔来查询它。但是在使用 DateTimePart 函数时,RU 急剧增加。如果没有 datetimepart 函数,一个月的数据是 184,如果我添加 datetimepart 函数,它会跳转到 6000。

我试过这样的查询:

SELECT c.config,c.datetime
FROM c where c.config='DBM'  and c.datetime >='2021-04-21T07:02:16' 
and c.datetime <='2021-05-21T07:02:16' and (DateTimePart('minute' , c.body.metadata.datetime) % 60) = 0

以及使用子查询连接,但仍然没有降低 rus 的运气。

有没有人有任何其他想法可以用来查询间隔的数据,所以基本上如果我查询一个月的数据,但选择每小时间隔,我应该获取该月每小时的数据

萨沙

标签: azure-cosmosdbazure-cosmosdb-sqlapi

解决方案


对于常见且昂贵的查询,在模型中合并额外的派生字段以优化查询成本是有意义的。例如,如果您总是在小时标记上查询项目,您可以使用附加属性编写这些记录,minuteOfHour: 0然后使用更直接的查询:

SELECT c.config,c.datetime
FROM c where c.config='DBM' and c.minuteOfHour = 0 and c.datetime >='2021-04-21T07:02:16' 
and c.datetime <='2021-05-21T07:02:16'

换句话说,策略是预先计算一次,而不是强制查询引擎为每个项目执行每个查询的工作。

它还可能有助于添加一个或多个复合索引以降低查询成本。

当然,总是要测试不同的方法,看看哪种方法成本最低。


推荐阅读