昂贵 SELECT DISTINCT 低基数 属性
Expensive SELECT DISTINCT low cardinality property
我想查询 Azure Cosmos DB 容器中所有分区中某个 属性 的不同值。
被查询的特定 属性 被索引并且具有低基数,即不同值的数量很少(小于 100)。
尽管查询必须 运行 所有分区我认为这种查询会很有效,因为它可以直接从索引中解析。
SQL查询是:(cnt
是我感兴趣的低基数属性)
SELECT DISTINCT c.cnt FROM c
查询统计(来自 Azure 门户)报告:
- 请求费用:13386.61 RU
- 显示结果:1 - 9
- 检索到的文档数:753161
- 检索到的文档大小:676125621 字节
- 输出文档数:15
- 输出文档大小:455 字节
- 索引命中文档数:0
- 索引查找时间:0 毫秒
- 文档加载时间:8341.91 毫秒
- 查询引擎执行时间:637.4 毫秒
我得到 9 个结果,这是预期的基数。但统计数据似乎表明根本没有使用索引 - 使其成为一个昂贵的查询。
检索到的文档数是 753 161。我的第一个想法是查询扫描所有项目,所以我用 cnt
属性:[=17= 对所有项目进行了计数]
SELECT COUNT(c.cnt) AS TotalCount FROM c
但结果是:
[
{
"TotalCount": 3518847
}
]
这告诉我扫描了 3 518 847 件物品中的 753 161 件 (~21%)。这很好,但让我对发生的事情了解得更少。
现在回答我的问题:
是否可以编写 SELECT DISTINCT 查询(跨分区)以便(正确)使用索引?
如果不是,请帮助我理解为什么统计数据表明扫描超过 21% 的所有项目都带有查询 属性。
Can the SELECT DISTINCT query (cross partition) be written so that it makes (proper) use of indexes?
不可以,但这是他们正在开发的功能 (source)。
为什么它只扫描 21% 我不太清楚,因为我希望它遍历整个集合。可能是 Azure 门户只检索了一部分结果,而恰好你的 21% 的数据包含你期望的每个不同值。
在这种情况下,REST API 将 return 一个继续令牌来检索下一组文档(通常通过结果上的 load more
按钮在 Azure 门户中可见选项卡)。
我想查询 Azure Cosmos DB 容器中所有分区中某个 属性 的不同值。
被查询的特定 属性 被索引并且具有低基数,即不同值的数量很少(小于 100)。
尽管查询必须 运行 所有分区我认为这种查询会很有效,因为它可以直接从索引中解析。
SQL查询是:(cnt
是我感兴趣的低基数属性)
SELECT DISTINCT c.cnt FROM c
查询统计(来自 Azure 门户)报告:
- 请求费用:13386.61 RU
- 显示结果:1 - 9
- 检索到的文档数:753161
- 检索到的文档大小:676125621 字节
- 输出文档数:15
- 输出文档大小:455 字节
- 索引命中文档数:0
- 索引查找时间:0 毫秒
- 文档加载时间:8341.91 毫秒
- 查询引擎执行时间:637.4 毫秒
我得到 9 个结果,这是预期的基数。但统计数据似乎表明根本没有使用索引 - 使其成为一个昂贵的查询。
检索到的文档数是 753 161。我的第一个想法是查询扫描所有项目,所以我用 cnt
属性:[=17= 对所有项目进行了计数]
SELECT COUNT(c.cnt) AS TotalCount FROM c
但结果是:
[
{
"TotalCount": 3518847
}
]
这告诉我扫描了 3 518 847 件物品中的 753 161 件 (~21%)。这很好,但让我对发生的事情了解得更少。
现在回答我的问题:
是否可以编写 SELECT DISTINCT 查询(跨分区)以便(正确)使用索引?
如果不是,请帮助我理解为什么统计数据表明扫描超过 21% 的所有项目都带有查询 属性。
Can the SELECT DISTINCT query (cross partition) be written so that it makes (proper) use of indexes?
不可以,但这是他们正在开发的功能 (source)。
为什么它只扫描 21% 我不太清楚,因为我希望它遍历整个集合。可能是 Azure 门户只检索了一部分结果,而恰好你的 21% 的数据包含你期望的每个不同值。
在这种情况下,REST API 将 return 一个继续令牌来检索下一组文档(通常通过结果上的 load more
按钮在 Azure 门户中可见选项卡)。