Java Mongo索引查询

标签 java mongodb

Mongodb中有1M数据,数据格式如下:

key:"xyz", time:10

我正在编写一个Java程序来根据“键”和“时间”范围从Mongodb查询数据,例如

BasicDBObject query = new BasicDBObject("key", "xyz")
          .append("time", new BasicDBObject("$gt", 99999).append("$lt", 100010));

在查询之前,我先为“Key”和“time”字段设置索引,如下所示:

table.ensureIndex(new BasicDBObject("key", 1));
table.ensureIndex(new BasicDBObject("time", 1));

查询性能实际上运行良好(大约每秒 4k)。所以我的问题是,我将“key”和“time”的索引设置为 1 表示在这种情况下升序。那我把它们设置为-1或者其中一个为1,另一个为-1呢?根据我的情况,1 和 -1 之间的性能差异是什么?

最佳答案

对于单字段索引,指定升序还是降序并不重要。不会有任何性能影响。

顺序仅对复合索引(即在 2 个或更多字段上创建的索引)有意义。如果我们在“key”(asc)和“time”(desc)字段上创建复合索引,即 {key:1, time:-1},则查询 db.collection.find({key:"xyz", time:10}) 将仅在查询的第一部分使用索引,即仅用于使用“key”过滤文档。索引的第二部分未使用。

此外,MongoDB 仅使用索引进行查询。在您所描述的情况下,由于您创建了 2 个单独的索引,因此仅使用“key”索引。如果您创建复合索引 {key:1, time:1}(均为升序),那么您的查询将会执行得更好。

关于Java Mongo索引查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22366008/

相关文章:

java - RegEx : Where should I start? 之后分割 PDF

mongodb - 如何计算mongo中的数组元素

performance - mongoose 在这种情况下子文档和全局之间的性能有什么区别吗?

java - GGTS 选择了错误的 java 路径

java - 如何将 Zip Statusbox 添加到 JFrame

java - JDBC + JSF,出现错误 : Parameter index out of range (2 > number of parameters,,即 1)

java - 从 Java 中的列表数组填充字符串数组

mongodb - 如何使用 Meteor Upsert

node.js - 如何更新 Mongoose 中的部分但非全部字段

mongodb - Mongoose 查询返回 null