提问者:小点点

MongoDB如何处理关于单个索引和复合索引的find().sort()查询?


所以我有一个典型的查询,我在我的mongo集合上运行。

db.collection.find({field1:1}).sort({field2:1})

现在,假设我在这个集合上有三个索引:

    上的单个索引 上的单个索引 复合索引-

现在我的问题,mongoDB如何对待上面的查询?在这样的查询中将使用哪些索引--两个单一索引还是一个复合索引?

如果我移除复合索引,它实际上是否利用了两个单一索引,但减慢了速度?


共1个答案

匿名用户

如果我明白你的意思,这可能会有帮助:

假设你有这些文件作为样品

{
    field1 : 1,
    field2 : 2,
},
{
    field1 : 2,
    field2 : 3,
},
{
    field1 : 1,
    field2 : 4,
}

步骤1:只为filed1(索引字段1_1的名称)创建索引:执行:

mongo使用field1_1索引在文档中搜索。explain()的结果是:

"cursor" : "BtreeCursor field1_1",
"isMultiKey" : false,
"n" : 2,
"nscannedObjects" : 2,
"nscanned" : 2,

步骤2:添加复合索引,命名为field1_1_field2_1,现在Field1有2个索引。

执行查询,您将拥有

"cursor" : "BtreeCursor field1_1_field2_1",
"isMultiKey" : false,
"n" : 2,
"nscannedObjects" : 2,
"nscanned" : 2,

结论:

如果使用,则mongo将使用索引。

如果使用,则mongo将使用索引。

在您的案例中,如果您只有field1_1_field2_1索引,并且正在执行,则mongo也将使用索引。