mongodb - Mongodb:使用排序键作为复合索引的一部分还是在它自己的索引中?
问题描述
假设您有以下集合:
{name: 'john', occupation: 'engineer', country: 'UK', age: 20},
{name: 'allan', occupation: 'teacher', country: 'US', age: 25},
...
你需要找到一些人(例如所有名叫凯文的毒贩)并按照他们的年龄对他们进行排序:
collection.find({name: 'kevin', occupation: 'drug-dealer'}).sort({age: -1})
稍后您可能会执行不同的查询,在其中找到所有毒贩(无论他们的名字)并按年龄对他们进行排序:
collection.find({occupation: 'drug-dealer'}).sort({age: -1})
有一个单独的“年龄”索引或将其作为几个复合索引的一部分会更好吗?
部分复合指数:
{occupation: 1, age: 1}
{name: 1, occupation: 1, age:1}
单独索引:
{occupation: 1}
{name: 1, occupation: 1}
{age: 1}
什么会产生最好的性能?各自的优缺点是什么?
解决方案
复合索引就可以了。由于您正在查询中运行排序,因此请确保以正确的顺序构建复合索引,以便您的查询不仅可以利用索引来过滤文档,还可以对它们进行排序。否则 mongodb 将执行效率不高且限制为 32 MB 的内存中排序
推荐阅读
- java - 我运行下面的 rmi 程序,但它显示命令执行失败
- reactjs - 如何在 Redux 应用程序中使用 API
- ios - 如何在快捷方式应用程序中深度链接到自动化?
- python - 如何将excel文件列引用(A..B)读入pandas数据框 - Python
- javascript - 如何同步倒数计时器,两个单独选项卡中的相同链接
- java - 如何移除 FLAG_SECURE 的影响?
- visual-c++ - 纱线安装错误:带有 node-gyp 的 msnodesqlv8
- java - 线程“主”java.lang.BootstrapMethodError 中的异常:java.lang.NoClassDefFoundError:org/springframework/beans/factory/ListableBeanFactory
- makefile - 如何更改 make 文件以合并更改?
- javascript - 为什么不响应导入并使用我的 CSS 样式?