Mongodb中有1M个数据,数据格式如下:
key:"xyz", time:10
我正在编写一个Java程序来根据" key"来查询来自Mongodb的数据。和"时间"范围,如
BasicDBObject query = new BasicDBObject("key", "xyz")
.append("time", new BasicDBObject("$gt", 99999).append("$lt", 100010));
在查询之前,我为" Key"设置了索引。和"时间"领域首先,像这样:
table.ensureIndex(new BasicDBObject("key", 1));
table.ensureIndex(new BasicDBObject("time", 1));
查询性能实际上工作正常(大约每秒4k)。所以我的问题是我为"键"设置了索引。和"时间"在这种情况下,1表示升序。我把它们设置为-1或其中一个1,另一个是-1?根据我的情况,1和-1之间的性能差异是什么?
答案 0 :(得分: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}(均为升序),那么您的查询将表现更好。