Appearance
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 高级索引。