Skip to content

MongoDB 索引

为什么需要索引?

索引可大幅加速查询、排序、聚合等操作,避免全集合扫描。未建索引的查询会进行 COLLSCAN(全表扫描),数据量大时性能很差。

创建单字段索引

javascript
db.users.createIndex({ name: 1 })    // 升序
db.users.createIndex({ age: -1 })   // 降序

创建复合索引

多字段组合,顺序会影响可支持的查询与排序:

javascript
db.users.createIndex({ status: 1, createdAt: -1 })

适合查询如 { status: "active" } 并按 createdAt 排序。

查看索引

javascript
db.users.getIndexes()

默认会有 _id 唯一索引。

删除索引

javascript
db.users.dropIndex("name_1")           // 按名称
db.users.dropIndex({ age: -1 })        // 按 key
db.users.dropIndexes()                 // 删除除 _id 外全部索引(慎用)

常用索引类型

类型说明
单键/复合普通查询与排序
唯一索引unique: true,保证字段值唯一
文本索引text,全文检索
地理索引2dsphere,地理位置查询
TTL 索引expireAfterSeconds,自动过期删除

唯一索引示例:

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

更多见 MongoDB 聚合MongoDB 高级索引