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

时间:2017-10-31 08:51:09

标签: azure indexing azure-cosmosdb sql-execution-plan

即使您仔细设计了文档架构并手工制作了最小的必要索引,以实现读取与更改方案之间的良好平衡,但对于重RU查询而言,哪个索引实际上正在执行工作并且如果选择的话,可能并不总是直观的是你所期望的。或者在关键属性名称中的索引策略中可能存在拼写错误,导致静默回退到某些其他查询所需的某些不合适的索引。

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

  • RequestCharge每个查询的使用情况,但没有说明此RU的用途。
  • 使用x-ms-documentdb-populatequerymetrics标头的时间/计数指标,这很有用,暗示使用了“某些”索引,但没有使用哪一个。

问题是上述工具集仍然迫使盲目实验并致力于无法验证的假设,导致查询/索引优化成为一个耗时的过程。

在SQL Server中,您只需获取执行计划并验证索引设计和使用的正确性。 DocumentDB是否有类似的工具?

当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

1 个答案:

答案 0 :(得分:2)

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

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

  

我们很高兴地宣布查询执行统计信息的可用性:https://docs.microsoft.com/en-us/azure/cosmos-db/documentdb-sql-query-metrics#query-execution-metrics

     

使用这些指标,您可以推断执行计划并调整查询和索引以获得最佳性能权衡

目前它似乎没有正式公开有关已使用索引的详细信息,但我们希望它将在未来的某个版本中发生变化。