# 索引优化与 explain 使用

URL: https://caijiao.org/mongodb/05-indexes/04-explain
Source: docs/mongodb/05-indexes/04-explain.md
Description: 本章节介绍 MongoDB 中索引优化的基本方法及使用 explain 分析查询性能，帮助用户提升数据库效率。

索引是提升查询效率的关键，但不合理的索引设计反而会降低性能。使用 `explain()` 可以分析查询计划，优化索引策略。

## 索引优化技巧

- **创建适合的索引**  
  根据查询频率和过滤条件创建单字段或复合索引，避免不必要的索引过多。

- **最左前缀原则**  
  复合索引的字段顺序影响索引利用，查询条件应包含索引的最左前缀字段。

- **避免全表扫描**  
  查询应尽量利用索引，减少扫描大量文档。

- **定期删除无用索引**  
  监控索引使用情况，移除未使用或低效索引，节省存储和写入开销。

## 使用 explain 分析查询

`explain()` 方法返回查询的执行计划，帮助理解查询是否使用索引及效率。

### 示例

```js
db.users.find({ age: { $gt: 25 } }).explain("executionStats")
````

返回详细的执行信息，包括：

- `winningPlan`：实际使用的查询计划。
- `totalDocsExamined`：扫描的文档数。
- `executionTimeMillis`：执行时间。

### 解释关键字段

- `IXSCAN` 表示索引扫描，`COLLSCAN` 表示集合扫描（全表扫描）。
- `nReturned` 返回结果数。
- `executionStages` 显示查询过程的各个阶段。

## 总结

结合合理的索引设计和 `explain` 分析，可以有效优化 [MongoDB](/mongodb/) 查询性能，提升数据库响应速度。
