当前位置: 首页 > 知识库问答 >
问题:

Azure Cosmos DBSQL正在消耗更多RU

满元凯
2023-03-14

我们试图在我们的一个项目中使用Azure Cosmos DB。基本上,我们会将GROUP BY和ORDER BY子句一起广泛地进行查询。

然而,COSMOS DB索引并未得到有效使用。查询统计数据显示1000 RU/s消耗。

由于我是COSMOS DB的初学者,我不确定行为是否通常。

有人能帮助减少RU/s吗?

查询1

SELECT li.mfrpartnumber, SUM(li.total)
FROM bi
JOIN li IN bi.lineitems
WHERE EXISTS(
    SELECT VALUE r FROM bi.readers r WHERE ARRAY_CONTAINS(r, "abc", true)
) AND bi.form = "Billing"
GROUP BY li.mfrpartnumber

查询 2

SELECT li.mfrpartnumber, SUM(li.total)
FROM bi
JOIN (SELECT VALUE r FROM bi.readers r WHERE ARRAY_CONTAINS(r, "abc", true))
JOIN (SELECT VALUE li FROM li IN bi.lineitems) li
WHERE bi.form = "Billing"
GROUP BY li.mfrpartnumber

共有1个答案

蒋承教
2023-03-14

这个问题是由本文中解释的内容引起的,标量聚合函数的索引利用率。

EXISTS()子查询和ARRAY_CONTAINS -不能将索引用于在筛选谓词和group by中包含这两者之一的聚合查询,当前根本不能使用索引。

如果这些是高容量查询,那么我建议您探索使用具有不同li值的ChangeFeed在新容器中创建物化视图。mfrpartnumber和预聚合总和(li.total)。您可以使用一个单独的第二个容器来实现这一点,并添加一个附加属性,该属性的值为“查询1”和“查询2”,等等。您可以在查询中使用这些属性,以便在查询时区分这两个属性。您还可以添加其他属性,这些属性也可以用作筛选谓词。插入或更新容器中的数据时,使用Change Feed,然后使用新的聚合值更新第二个容器。

当您构建了这个时,您将想要衡量它的成本并将其与您的查询成本进行比较。如果它更便宜,那么您应该追求。

 类似资料:
  • 我有一个非常简单的Web服务器类(基于JavaSE的类)。 当我使用此命令启动编译后的类以限制内存使用时:

  • 本文向大家介绍如何确定在Oracle中消耗更多资源的SQL?,包括了如何确定在Oracle中消耗更多资源的SQL?的使用技巧和注意事项,需要的朋友参考一下 问题: 您要标识消耗Oracle中更多资源的SQL语句。 解 “ V $SQLSTATS”视图显示最近执行的SQL语句的性能统计信息,也可以使用“ V $SQL”和“ V $SQLAREA”报告SQL资源使用情况。  “ V $SQLSTATS

  • 我需要以下令牌: 允许的字符包括大写、小写、数字、空格和连字符 长度不固定(长度必须至少为两个字符) 标记必须至少包含一个空格或连字符 令牌必须以大写、小写、数字、空格或连字符开头和结尾(不能以空格开头或结尾) 下面语法中的ANTLR lexer规则“alphanumericspacehyphen”除了一个情况外几乎都起作用。使用解析器规则“sic”进行测试,以下输入将解析(不带引号): 以下输入

  • 我们使用的是Spring kafka 2.7非阻塞重试机制。在Spring Kafka重试机制中,Kafka listenser使用来自main topic、Retry topic和DLT topic的消息,我们希望侦听器仅使用来自main和Retry topic的消息。 有没有简单的方法来进行设置? 因为我们不希望同一个消费者处理DLT消息。DLT还将被另一个进程使用,以发送请求通知。

  • Android Studio在Mac机上消耗了太多的内存,并且还运行了多java进程。 Android Studio版本:使用Android Studio北极狐2020.3.1(补丁1构建#AI-203.7717.56.2031.7621141,构建于2021年8月7日) 当我面临内存不足的问题时,我正在监视Android Studio的内存消耗,我注意到多个“Java”进程正在运行,甚至一个进程

  • 问题内容: 我试图检查Go如何处理100,000个goroutine。我写了一个简单的程序来产生许多例程,除了打印一些公告外什么也不做。我将MaxStack大小限制为只有512个字节。但是我注意到程序的大小并没有因此而减少。它消耗了大约460 MB的内存,因此每个goroutine消耗了大约4 KB的内存。我的问题是,我们可以将goroutine的最大堆栈大小设置为低于“最小”堆栈大小(可能为4