Azure Cosmos DB已定义索引验证及查询性能优化问题
验证Azure Cosmos DB索引定义与使用的方法
一、确认索引策略是否正确定义
你可以通过以下方式检查当前容器的索引策略是否生效:
- Azure门户操作:进入Cosmos DB账户 -> 目标容器「Parts」-> 「数据资源管理器」-> 容器的「设置」-> 「索引策略」,查看当前的JSON配置是否和你添加的一致。注意你配置里的
/*已经包含了所有路径,单独添加/parts/[]/partNumber/?属于重复配置,不会有额外作用,但也不会导致问题。 - Azure CLI命令:运行以下命令获取容器的索引策略:
返回的JSON会显示当前生效的索引规则,确认是否包含目标路径。az cosmosdb sql container show --account-name <你的账户名> --resource-group <资源组名> --database-name <数据库名> --name Parts --query "indexingPolicy"
二、验证查询是否命中索引
这是判断索引是否起作用的核心步骤:
查看查询执行统计
在Azure门户的「数据资源管理器」中运行你的查询时,点击查询窗口下方的「显示查询统计信息」,重点关注:- Index Hit Ratio:如果值为1.0,说明查询完全命中索引;如果远小于1,说明索引没被有效使用。
- Total Request Units:对比加索引前后的RU消耗,若没有下降,大概率索引未命中。
- Query Execution Time:结合RU消耗判断性能变化。
使用EXPLAIN关键字分析执行计划
在查询前加上EXPLAIN,比如:EXPLAIN SELECT c.partNumber FROM c WHERE ARRAY_CONTAINS(c.parts, { 'partNumber': 'ABC12345'}, true)查看返回的执行计划JSON,找到
IndexSpec字段,检查其中的includedPaths是否包含/parts/[]/partNumber/?,同时看QueryPlan里是否有IndexLookup步骤——如果有,说明查询使用了索引;如果是Scan步骤,说明是全表扫描,索引未生效。
三、关于浏览Cosmos DB索引内容
Cosmos DB没有提供直接浏览索引物理内容的工具,因为索引是后台维护的内部结构。你只能通过上述两种方式间接验证:
- 确认索引策略已正确应用到容器
- 通过查询执行统计和EXPLAIN计划确认查询是否命中索引
另外补充一点:你的查询使用ARRAY_CONTAINS并指定第三个参数为true(严格匹配),需要确保数组中的partNumber字段类型完全一致(比如都是字符串,没有数字或其他类型),否则即使索引存在,也可能无法命中。
内容的提问来源于stack exchange,提问作者Djdev
相关产品推荐
相关产品推荐

