DocumentDB:如何验证使用了哪些索引?

DocumentDB: How to verify which indexes were used?

即使您精心设计了文档模式并手工制作了最少的必要索引以实现读取与更改场景的良好平衡,也可能并不总是直观地知道哪个索引实际上在为 heavy-RU 查询工作如果选择是你所期望的。或者可能在关键 属性 名称中的索引策略中存在拼写错误,导致 fall-back 对某些其他查询所需的某些不合适的索引进行静默 fall-back..

我知道我可以使用以下工具来调试 DocumentDB 中的索引使用情况:

问题是上述工具集仍然强制进行盲目实验并在无法验证的假设下工作,导致 query/index 优化成为一个 time-consuming 过程。

在SQL 服务器中,您可以简单地获取执行计划并验证索引设计和使用的正确性。 DocumentDB 有类似的工具吗?

说明性 pseudo-example 当 DocDB 将选择哪个索引不明显时的查询:

select s.poorlySelectiveIndexed
from c
join s in c.sub
where c.anotherPoorlySelectiveIndexed = @aCommonValue
   and s.Indexed1 in ('a', 'b', 'c') 
   and ARRAY_CONTAINS(s.Indexed2, @searchValue)
   and ARRAY_CONTAINS(s.Indexed3, 'literalValue')
   and (s.SuperSelective ='23456' OR c.AnotherSuperSelective = '76543') 
order by s.RangeIndexed4

似乎 documentDB 团队正在考虑已经提到的 x-ms-documentdb-populatequerymetrics header 及其作为此类工具的相应响应。

如 2017 年 8 月 27 日 this response from "Azure Cosmos DB Team" in Azure feedback site 中所述:

We’re pleased to announce the availability of query execution statistics: https://docs.microsoft.com/en-us/azure/cosmos-db/documentdb-sql-query-metrics#query-execution-metrics

Using these metrics, you can infer the execution plan and tune the query and index for best performance tradeoffs.

目前官方似乎没有公开使用索引的详细信息,但希望在未来的某个版本中有所改变。