我有几个关于 MongoDB 的问题:
(1) 索引是否有助于投影?
(2) 我已经为一个集合分配了许多索引,并尝试使用排序运行查找,然后使用,它在排序字段上explain
显示索引。BtreeCursor
难道是其他索引在查询部分有所帮助,explain
只是没有显示它,因为它只显示了帮助查找的最后一个索引?
还是explain
应该显示所有有助于查询、排序等的索引?
谢谢。
我有几个关于 MongoDB 的问题:
(1) 索引是否有助于投影?
(2) 我已经为一个集合分配了许多索引,并尝试使用排序运行查找,然后使用,它在排序字段上explain
显示索引。BtreeCursor
难道是其他索引在查询部分有所帮助,explain
只是没有显示它,因为它只显示了帮助查找的最后一个索引?
还是explain
应该显示所有有助于查询、排序等的索引?
谢谢。
索引是否有助于投影?
我相信唯一真正有帮助的时候(由性能等定义)是查询是否被“覆盖”:http ://docs.mongodb.org/manual/tutorial/create-indexes-to-support-queries/
因此,例如,如果您想查询{d:1, e:2}
并返回{_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()
输出将显示indexOnly
为真实的意思,即它从未从磁盘加载文档以返回响应。
所以是的,在某些情况下,索引可以帮助进行预测。
我已经为集合分配了许多索引,并尝试使用排序运行查找,然后使用说明,它在排序字段上显示 BtreeCursor 索引。
是的,它确实。
可能是其他索引在查询部分有所帮助并且解释只是没有显示它,因为它只显示帮助查找的最后一个索引?
如果您是索引交叉的受害者,那么您将使用 anexplain(true)
来显示所有使用的索引计划。
需要注意的是,单独的索引不用于查找和排序交叉,所以这里的答案实际上是否定的: http: //docs.mongodb.org/manual/core/index-intersection/#index-intersection-and -种类