智汇百科
霓虹主题四 · 更硬核的阅读氛围

MongoDB创建索引:提升查询速度的实用操作

发布时间:2026-01-25 06:41:09 阅读:28 次

在日常办公中,我们常把 MongoDB 当作一个灵活的数据仓库来用——比如存客户信息、会议记录、项目进度表。数据一多,查一条记录就卡一下,这事儿谁没遇到过?其实,给常用字段加个索引,就像给图书馆加了目录,翻找效率立马翻倍。

什么时候该建索引?

当你发现这些情况时,就是时候动手建索引了:查某个人的手机号老是慢、按部门筛选员工列表总要等好几秒、导出上月所有审批单耗时特别长……这些背后往往缺的不是硬件,而是一个合适的索引。

最常用的建索引命令

假设你有个 users 集合,里面存着员工基本信息,经常按 departmentstatus 一起筛选:

db.users.createIndex({ department: 1, status: 1 })

这里的 1 表示升序,-1 是降序。如果只按姓名查得多,那就单独给 name 加一个:

db.users.createIndex({ name: 1 })

别忘了唯一索引

像工号、邮箱这类不能重复的字段,建唯一索引既能提速,又能防重数据。比如防止同一邮箱被反复录入:

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

一旦有人尝试插入重复邮箱,MongoDB 会直接报错,省得后期人工核对。

文本索引适合搜索场景

如果你要做模糊关键词搜索,比如在会议纪要里搜“预算”“延期”“上线”,可以建个文本索引:

db.meetings.createIndex({ title: "text", content: "text" })

之后就能用 $text 查询了:

db.meetings.find({ $text: { $search: "预算 上线" } })

小技巧:查看和删索引

建完不确定效果?先看看当前有哪些索引:

db.users.getIndexes()

发现某个索引没用上,或者命名不规范,也能随时删掉:

db.users.dropIndex("department_1_status_1")

名字不对?用 getIndexes() 看一眼就知道了。

索引不是越多越好。每个索引都会占磁盘空间,写入新数据时还要同步更新索引,所以只给真正高频查询的字段建,别的先放一放。就像办公桌抽屉,常用的东西放前面,不常碰的收进柜子深处。