CosmosDB 中 GROUP BY 的索引

Indexing for GROUP BY in CosmosDB

如标题所示,我想知道如何在 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 RU。显然,与 GROUP BY 查询相比,结果需要一些 post-processing 才能匹配。但与 1489 RU 相比,总共 5.6 RU 还是值得的。

collection上的索引如下:

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

我是不是完全遗漏了什么,或者 GROUP BY 怎么会贵这么多?我可以做任何索引来降低它吗?

提前致谢!

目前GROUP BY还没有使用索引

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

有这方面的更新吗?或者 GROUP BY 的替代方案?我正在尝试 运行 以下查询,但速度太慢了:

select c.SomeProperty
from c
group by c.SomeProperty