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
如标题所示,我想知道如何在 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