温馨提示×

Debian MongoDB如何配置索引

小樊
41
2026-08-02 05:25:06
栏目: 云计算

Debian 上配置 MongoDB 索引,本质上和操作系统无关,主要是 MongoDB Shell(mongosh)或驱动 的操作。下面按 实战流程 给你一个完整说明,从安装到索引创建、查看、优化和常见问题。


一、前提:确认 MongoDB 已安装并运行

1. 检查 MongoDB 状态

sudo systemctl status mongod

2. 进入 MongoDB Shell

mongosh

如果使用的是旧版本:

mongo

二、选择数据库和集合

use mydb

查看集合:

show collections

三、创建索引(核心)

1. 创建单字段索引

db.users.createIndex({ username: 1 })
  • 1:升序
  • -1:降序

2. 创建复合索引

db.orders.createIndex({ userId: 1, createdAt: -1 })

✅ 常用于:

  • 联合查询
  • 排序优化

3. 创建唯一索引

db.users.createIndex({ email: 1 }, { unique: true })

防止重复数据。


4. 创建文本索引(全文搜索)

db.articles.createIndex({ content: "text" })

支持:

db.articles.find({ $text: { $search: "MongoDB" } })

5. 创建 TTL 索引(自动过期)

db.sessions.createIndex(
  { createdAt: 1 },
  { expireAfterSeconds: 3600 }
)

✅ 用于:

  • 会话
  • 日志
  • 临时数据

6. 后台创建索引(生产推荐)

db.users.createIndex(
  { username: 1 },
  { background: true }
)

避免阻塞写操作。


四、查看索引

1. 查看集合所有索引

db.users.getIndexes()

2. 查看索引大小

db.users.stats().indexSizes

五、删除索引

1. 删除指定索引

db.users.dropIndex({ username: 1 })

2. 删除所有索引(⚠️ 慎用)

db.users.dropIndexes()

六、索引使用分析(非常重要)

1. 查看查询是否使用索引

db.users.find({ username: "tom" }).explain("executionStats")

关注:

  • IXSCAN(索引扫描 ✅)
  • COLLSCAN(全表扫描 ❌)

七、Debian 上的常见配置建议

1. 修改 MongoDB 配置文件

sudo nano /etc/mongod.conf

常见优化项:

storage:
  engine: wiredTiger

setParameter:
  enableLocalhostAuthBypass: false

重启:

sudo systemctl restart mongod

2. 内存与索引

  • 索引 常驻内存
  • 生产环境建议:
    • 内存 ≥ 索引总大小
    • 避免频繁创建/删除索引

八、生产环境最佳实践 ✅

✅ 只为 高频查询字段 建索引
✅ 复合索引字段顺序要匹配查询条件
✅ 避免在 写多读少 的集合建太多索引
✅ 大集合建索引使用 background: true
✅ 定期用 explain() 分析慢查询


九、常见错误

1. 索引创建卡住

原因:

  • 集合太大
  • 没加 background

解决:

db.currentOp()
db.killOp(opid)

2. 唯一索引报错

E11000 duplicate key error

解决:

  • 先清理重复数据
  • 或使用稀疏索引:
db.users.createIndex(
  { email: 1 },
  { unique: true, sparse: true }
)

十、示例:完整流程

use shop

db.products.createIndex({ category: 1, price: -1 }, { background: true })

db.products.find(
  { category: "phone", price: { $gt: 1000 } }
).explain("executionStats")

如果你愿意,我可以:

  • ✅ 帮你 分析现有查询是否走索引
  • ✅ 给你 针对具体业务的索引设计
  • ✅ 帮你 排查 Debian + MongoDB 慢查询问题

直接把你的 查询语句 + 集合结构 发我即可。

0