【发布时间】: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