【问题标题】:Azure Cosmos DB SQL is consuming more RUsAzure Cosmos DB SQL 消耗更多 RU
【发布时间】:2021-08-14 02:39:05
【问题描述】:

我们正在尝试在我们的一个项目中使用 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

【问题讨论】:

    标签: azure-sql-database azure-cosmosdb azure-cosmosdb-sqlapi


    【解决方案1】:

    此问题是由本文Index utilization for scalar aggregate functions 中的说明引起的。

    EXISTS() 子查询和 ARRAY_CONTAINS - 无法将索引用于在过滤谓词中包含其中任何一个的聚合查询,并且 group by 目前根本无法使用索引。

    如果这些查询量很大,那么我建议您探索使用 Change Feed 将物化视图创建到新容器中,并为 li.mfrpartnumber 和预聚合总和 (li.total) 提供不同的值。您可以使用单个第二个容器执行此操作,并添加一个附加属性,其值为“查询 1”和“查询 2”等,您在查询中使用这些属性在查询时区分这两者。您还可以添加也用作过滤谓词的其他属性。当您的容器中的数据被插入或更新时,使用 Change Feed 然后使用新的聚合值更新第二个容器。

    构建完成后,您将需要衡量其成本并将其与查询成本进行比较。如果它更便宜,那么你应该追求。

    【讨论】:

      猜你喜欢
      • 2022-01-19
      • 2019-04-24
      • 1970-01-01
      • 2020-01-09
      • 2022-01-08
      • 1970-01-01
      • 2020-06-03
      • 1970-01-01
      • 2022-01-02
      相关资源
      最近更新 更多