千家信息网

写给MongoDB开发者的50条建议Tip25

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本系列文章翻译自《50 Tips and Tricks for MongoDB Developers》,暂时没有找到中文版,反正自己最近也在深入学习mongodb,所以正好拿来翻译一下。一方面加强自己
千家信息网最后更新 2026年11月01日写给MongoDB开发者的50条建议Tip25

本系列文章翻译自《50 Tips and Tricks for MongoDB Developers》,暂时没有找到中文版,反正自己最近也在深入学习mongodb,所以正好拿来翻译一下。一方面加强自己学习的效果,另一方面让大家也一起来体验一下需要我们这些mongodb使用者需要注意的地方。

首先声明自己的英文水平不是太高,加之有些英文翻译成中文也找不到合适的词来表达,所以在文章中可能会出现英文原词,或者说有些地方的翻译会有些生 硬,也就是说会出现直译的地方。翻译该书的主要目的是为大家学习探讨用的,如果有翻译不精准的地方,或者说有更加精准的翻译,还请大家指出,我会及时的更正的,在此先谢过各位了。

Tip#25.Use compound indexes to make multiple queries fast

使用复合索引加速查询

如果有可能的话,创建能被多个查询使用的复合索引。也不总是有可能,但是如果你的多个查询都是相似的条件,还是很必要的。

任何查询,主要匹配了索引的前缀,就可以使用该索引。因此,你建立的索引应该是包含被多个查询共享的,最大数量的条件。

假设你的应用会执行下面的查询。

  1. collection.find({"x":criteria,"y":criteria,"z":criteria})
  2. collection.find({"z":criteria,"y":criteria,"w":criteria})
  3. collection.find({"y":criteria,"w":criteria})

如你所见,y是唯一一个所有查询都用到的字段,因此y字段是一个很好的候选者。z字段在前两个查询中出现,w字段在后两个查询中出现,两者之一将会作为下一个候选者。

我们想要尽可能的命中建立的索引。如果可以确定第一个查询很重要,或者比其他两个频繁,我们建立的索引就要倾向第一个查询。假设第一个查询的执行次数是其他两个的上千倍,我们就可以建立下面的索引。

  1. collection.ensureIndex({"y":1,"z":1,"x":1})

第一个查询得到了很高的优化,另外两个的部分查询可以使用这个索引。

如果所有的查询运行次数均等,可以建立下面的索引。

  1. collection.ensureIndex({"y":1,"w":1,"z":1}) 

因为条件中都包含有y,因此三个查询都可以使用这个索引,后面两个可以使用w,中间的可以完全的是偶那个这个索引。

你可以通过下面的命令查看一个查询的索引使用情况。

  1. collection.find(criteria).explain()
查询 索引 两个 地方 字段 面的 多个 条件 英文 学习 精准 候选者 文章 次数 中文 合适 最大 相似 重要 频繁 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 咖啡网 互联网科技行业发展 腾讯阿里互联网科技 深圳科技互联网 互联网未来科技 广州善班互联网科技 成都狮子座互联网科技 海南购全球互联网科技 云创客互联网科技公司 广州慧亚互联网科技怎么样 重庆互联网医院沙龙医盟信息科技 晓花互联网科技有限公司网址 互联网5g黑科技有哪些 中国科技创新与世界互联网大会 保险科技服务互联网营销体系 银行科技岗属于互联网吗 黑云互联网科技有限公司 互联网相关科技技术 互联网时代高科技布局 安徽九吞吴互联网科技有限公司 互联网科技开发公司 金融科技和互联网金融 新华互联网科技校企合作 互联网巨头投资的硬核科技 福建科技产业互联网发展 银川新华互联网科技学校联系电话 想开互联网科技公司怎么样 广州新华互联网科技学校电竞方面 互联网科技和医药行业 小牛互联网科技有限公司地址
0