具有排序和范围的MongoDB的复合索引

时间:2016-04-22 18:23:29

标签: mongodb

我有这样的疑问:

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});

这个复合指数会起作用吗?

1 个答案:

答案 0 :(得分:0)

正如@JohnnyHK所暗示的那样,这个索引可能会起作用,但如果你使用你发布的查询,这并不意味着你会提高效率。像$gte$lte这样的命令可以使用索引,但它们可能效率低下。从MongoDB官方YouTube频道观看此视频:https://www.youtube.com/watch?v=1sADN-NKwhY

此外,当您使用复合索引时,您需要关心将字段放在查询中的顺序,这在您的情况下是正确的。