在日常办公中,我们常把 MongoDB 当作一个灵活的数据仓库来用——比如存客户信息、会议记录、项目进度表。数据一多,查一条记录就卡一下,这事儿谁没遇到过?其实,给常用字段加个索引,就像给图书馆加了目录,翻找效率立马翻倍。
什么时候该建索引?
当你发现这些情况时,就是时候动手建索引了:查某个人的手机号老是慢、按部门筛选员工列表总要等好几秒、导出上月所有审批单耗时特别长……这些背后往往缺的不是硬件,而是一个合适的索引。
最常用的建索引命令
假设你有个 users 集合,里面存着员工基本信息,经常按 department 和 status 一起筛选:
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() 看一眼就知道了。
索引不是越多越好。每个索引都会占磁盘空间,写入新数据时还要同步更新索引,所以只给真正高频查询的字段建,别的先放一放。就像办公桌抽屉,常用的东西放前面,不常碰的收进柜子深处。