azure-cosmosdb - 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 的运气。
有没有人有任何其他想法可以用来查询间隔的数据,所以基本上如果我查询一个月的数据,但选择每小时间隔,我应该获取该月每小时的数据
萨沙
解决方案
对于常见且昂贵的查询,在模型中合并额外的派生字段以优化查询成本是有意义的。例如,如果您总是在小时标记上查询项目,您可以使用附加属性编写这些记录,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'
换句话说,策略是预先计算一次,而不是强制查询引擎为每个项目执行每个查询的工作。
它还可能有助于添加一个或多个复合索引以降低查询成本。
当然,总是要测试不同的方法,看看哪种方法成本最低。
推荐阅读
- haskell - Haskell - 用不同的函数迭代元组
- javascript - Firebase - 使用回调检索和存储数组中的数据
- python - 使用 Flask 运行时启动功能
- javascript - PDF.JS:由于缩放而重新加载/重新渲染停止 JS 事件
- angular - Angular 6 Mat-Dialog 无法从路由器插座打开
- python - 我如何才能在此字典中的“byUSer”列表用户中获得平衡?
- javascript - 检查一个字符串是否startsWith()并且不等于另一个字符串
- php - PHP如何给代码块一个父节点
- bash - 从命名管道捕获非零退出代码
- merge - 从临时表中删除其他更新