使用 Azure DocumentDB 中的索引顾问优化查询性能(预览版)

索引顾问是 Azure DocumentDB 的内置性能优化助手,可帮助你诊断慢查询、了解查询执行行为并实现优化的索引策略。 索引顾问将分析查询结构以及集合和索引统计信息。 然后,索引顾问会生成明确的数据驱动建议,其中包含可读说明特定索引为何有助于提高性能。

索引顾问的优点

下面是使用索引顾问的一些好处。

  • 确定性能瓶颈 和低效查询。
  • 接收按性能影响优先排列的可执行索引建议。
  • 了解索引为何重要,通过清晰易懂的英语解释。
  • 立即在扩展内应用索引建议
  • 创建索引后自动比较之前和之后的性能

索引顾问的用例

索引顾问支持各种查询模式和优化方案,以帮助提高数据库性能。

Scenario Description
相等/范围查询 处理简单相等或范围筛选器(例如, field = valuefield > value)。
复合筛选器/覆盖查询/查找联接 分析包括多个筛选条件或联接的查找查询,可以通过使用复合索引或覆盖索引对这些条件进行优化。
组合索引 建议多字段(复合)索引以支持复杂的查找/排序查询
仅排序 标识何时可以通过索引改进或覆盖排序操作。
过滤 + 排序 / 索引下推 建议索引结构,允许在索引层内高效处理筛选和排序,从而减少文档扫描。
现有索引覆盖率 支持查找查询;如果索引已存在,则不会建议新索引。

如果查询方案不属于这些模式,请联系 Azure DocumentDB 团队 ,获取特定用例的帮助。

先决条件

  • Azure 订阅服务

    • 如果没有 Azure 订阅,请创建 试用版
  • 现有的 Azure DocumentDB 群集

  • Visual Studio Code

连接到 Azure DocumentDB 群集

连接到 Visual Studio Code 扩展中的 Azure DocumentDB 群集。

  1. 从活动栏中打开 DocumentDB for Visual Studio Code 扩展。

  2. 选择 “添加连接 ”以创建新的群集连接。

  3. 选择身份验证方法并提供所需的连接详细信息。

  4. 测试连接以确保其正常工作。

  5. 展开群集以查看可用的数据库和集合。

打开用于分析的查询

在 DocumentDB 扩展中打开查询后,使用索引顾问开始进行性能分析。

  1. 在扩展中打开 “查找”、“ 聚合”或 “计数 ”查询。

  2. 转到 “查询见解 ”选项卡。

  3. 运行查询。 该面板显示关键性能指标,例如执行时间、返回的文档、检查的键数量和检查的文档数量。 索引顾问从连接的群集(标准模式)或预加载的数据(预加载模式)收集和分析查询执行计划和统计信息。 语言模型 (GitHub Copilot) 检查 净化 计划和统计信息,以推荐最佳索引。

    重要

    在发送分析之前,所有文本查询值(例如电子邮件、数字或文本)都替换为 <value> 占位符。

    下面是清理的示例:

    • 未发送的未清理查询

      {
        "filter": {
          "email": "john.doe@example.com",
          "age": { "$gt": 25 }
        }
      }
      
    • 已发送的清理查询

      {
        "filter": {
          "email": "<value>",
          "age": { "$gt": "<value>" }
        }
      }
      
  4. 直接应用建议;该扩展创建索引并重新运行查询以更新性能指标。

  5. 查看 查询统计信息 和执行 计划 摘要。

    查询统计信息部分的屏幕截图,其中包含执行时间、返回的文档数和检查的键/文档。

  6. 浏览 “优化机会 ”列表。 每个建议都包含一个人工可读的解释和建议的索引定义。

    优化机会的屏幕截图,其中包含当前查询的建议列表。

  7. 选择 “应用” 以创建建议的索引。 索引创建在后台异步运行。 完成后,面板会自动刷新并显示更新的结果。 创建索引后,索引顾问 会重新运行分析和 更新指标,以便比较性能改进。

索引顾问的限制

下面是索引顾问功能的限制。

  • 区域可用性: 索引顾问目前仅在 美国加拿大 区域可用。
  • 索引管理: 索引顾问仅建议创建新索引;目前不建议删除或隐藏现有索引。
  • 方案覆盖范围: 此版本中仅优化了前面列出的受支持方案。 对于其他查询类型,请联系 Azure DocumentDB 团队 或查看 索引最佳做法
  • 数据敏感度: 将数据库和集合名称视为元数据,但仍查看内部数据分类策略。

使用索引顾问时的最佳做法

下面是使用索引顾问功能的最佳做法。

  • 导出或共享统计信息时,请遵循组织的 数据管理策略
  • 在应用索引建议之前查看索引建议,以确保它们符合工作负荷和成本要求。
  • 避免在不查看依赖项或咨询 Azure DocumentDB 团队的情况下手动删除索引。
  • 如果查询模式不受支持,请查看 索引最佳做法 以获取指导和支持。

索引顾问注意事项

索引顾问旨在帮助你优化查询,同时保护每个步骤的数据隐私。

此列表显示扩展收集的数据:

  • 查询执行计划 - 结构信息和性能指标。
  • 集合统计信息 - 文档计数、数据和索引大小以及索引计数。
  • 索引详细信息 - 索引 名称、键模式和使用指标。
  • 群集元数据 - 有限的信息,例如 Azure 托管状态和 API 类型。

合规性和数据保护

为了确保合规性和数据保护,系统在发送任何信息进行分析之前实现以下安全措施:

  • 将查询和执行计划中的所有 文本值 替换为 <value>
  • 保留 字段名称和查询运算符(例如 email$gt$in以保留上下文。
  • 完全净化 执行计划,以确保不残留任何敏感或个人数据。
  • 保留 性能指标 (例如 nReturnedexecutionTimeMillis),因为它们不包含数据中的文本值。
  • 仅传输分析所需的 清理结构、统计信息和元数据-从不对文档或原始值进行采样。
  • 将任何需要未经清理的数据的未来功能提交完整的Microsoft隐私和合规性审查。

索引顾问仅分析查询结构和性能特征, 从不分析实际数据