我有这样的查询:
db.contacts.find({createdAt: {$gte: 1458585000000, $lte: 1461349799000},
asset_type: "personal",
createdBy: "pxedNoPZzGAdx2fnK",
status: "done"})
.sort({createdAt: -1})
是否可以为这种包含范围和排序的查询编写复合索引?
我创建了一个复合索引,如下所示:
contacts._ensureIndex({createdAt: 1, asset_type: 1, createdBy: 1, status: 1});
这个复合指数会起作用吗?
正如
@JohnnyHK所建议的那样,这个索引可能会起作用,但这并不一定意味着如果你使用你发布的查询,你会提高效率。$gte
和 $lte
等命令可以使用索引,但它们可能效率低下。看看MongoDB官方YouTube频道的这段视频:https://www.youtube.com/watch?v=1sADN-NKwhY
此外,当您使用复合索引时,您需要关心您在查询中放置字段的顺序,这在您的情况下是正确的。