MongoDB索引和投影

MongoDB索引和投影,mongodb,mongodb-indexes,Mongodb,Mongodb Indexes,关于MongoDB,我有几个问题: (1) 索引有助于投影吗 (2) 我为一个集合分配了许多索引,并尝试使用排序运行查找,然后使用explain,它在排序字段上显示BtreeCursor索引 可能是其他索引在查询部分有所帮助,而explain只是没有显示它,因为它只显示帮助查找的最后一个索引 或者explain应该显示所有有助于查询、排序等的索引 谢谢 索引有助于投影吗 我相信,只有当查询被“覆盖”时(由性能等定义),它才会真正有帮助: 例如,如果您想查询{d:1,e:2}并返回{u id,t,

关于MongoDB,我有几个问题:

(1) 索引有助于投影吗

(2) 我为一个集合分配了许多索引,并尝试使用排序运行查找,然后使用
explain
,它在排序字段上显示
BtreeCursor
索引

可能是其他索引在查询部分有所帮助,而
explain
只是没有显示它,因为它只显示帮助查找的最后一个索引

或者
explain
应该显示所有有助于查询、排序等的索引

谢谢

索引有助于投影吗

我相信,只有当查询被“覆盖”时(由性能等定义),它才会真正有帮助:

例如,如果您想查询
{d:1,e:2}
并返回
{u id,t,e}
,您可以执行以下操作:

db.t.ensureIndex({d:1 , e:1, _id:1, t:1});
db.t.find({d:1, e:2}, {_id:1, t:1, e:1});
该查询的
explain()
输出将以
索引的方式显示
,这意味着它从未从磁盘加载文档以返回响应

因此,是的,索引在某些情况下有助于预测

我给一个集合分配了许多索引,并尝试使用sort运行find,然后使用explain,它在排序字段上显示BtreeCursor索引

是的

可能是其他索引在查询部分起到了帮助作用,而explain没有显示它,因为它只显示了帮助查找的最后一个索引

如果您是索引交叉的受害者,那么您将使用
explain(true)
来显示所使用的所有索引计划

值得注意的是,单独的索引不用于交叉查找和排序,因此这里的答案实际上是否定的: