【问题标题】:Indexing for GROUP BY in CosmosDBCosmosDB 中的 GROUP BY 索引
【发布时间】:2021-11-19 16:55:16
【问题描述】:

正如标题所示,我想知道如何在 CosmosDB 中为 GROUP BY 查询创建有效索引。

假设文档看起来像这样:

{
    "pk": "12345",
    "speed": 500
},
{
    "pk": "6789",
    "speed": 100
}

执行查询以找出按分区键分组的速度的总和如下所示:

SELECT c.pk, SUM(c.speed) FROM c WHERE c.pk IN ('12345','6789') GROUP BY c.pk

这个查询需要大约 160 万个文档,需要 1489.51 个 RU。但是,将其拆分为两个查询,例如:

SELECT SUM(c.speed) FROM c WHERE c.pk = '12345'

SELECT SUM(c.speed) FROM c WHERE c.pk = '6789'

每个只花费约 2.8 RUs。显然,与 GROUP BY 查询相比,结果需要一些后处理才能匹配。但与 1489 个 RU 相比,总共 5.6 个 RU 是值得的。

对集合的索引如下:

{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/*"
        }
    ],
    "excludedPaths": [
        {
            "path": "/\"_etag\"/?"
        }
    ],
    "compositeIndexes": [
        [
            {
                "path": "/pk",
                "order": "ascending"
            },
            {
                "path": "/speed",
                "order": "ascending"
            }
        ]
    ]
}

我是否完全遗漏了某些东西,或者 GROUP BY 怎么会贵得多?我可以做任何索引来降低它吗?

提前致谢!

【问题讨论】:

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


    【解决方案1】:

    目前 GROUP BY 还没有使用索引。

    目前正在处理中。我会在年底的某个时候重新访问以验证它是否受支持。

    【讨论】:

    • 明白,感谢您的回答。所以我想在那之前最好的方法是拆分查询而不是像主题中描述的那样分组,如果我希望保存 RU?
    • 是的,现在将它们作为单独的操作运行。
    猜你喜欢
    • 2011-10-07
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 2010-11-29
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多