我有一系列课程,其中包含具有以下架构的文档
{
title: "Programming 101",
category: 1
likes: 10,
author: {
name: "Mike",
reputation: 100,
rating: 1500
},
created: 154895126, // unix timestamp
content: ".... html ... "
}
在我的应用程序的索引页面中,我显示了所有类别的最新 18 节课,所以这是
db.lessons.find().sort({created:-1}).limit(18)
由于这是一个非常常见的查询,而课程集合将是我在系统中最大的集合,我想尽可能地优化它,所以我在created上做了一个索引
db.lessons.ensureIndex({created:-1})
但有时我只想从一类中得到教训
db.lessons.find({category:1}).sort({created:-1}).limit(18)
所以我还在类别中添加了一个索引,因为如果我不这样做,mongo可以轻松排序,但它仍然需要逐个元素检查才能获得类别= 1的那个,所以
db.lessons.ensureIndex({category:1})
因为我不按类别排序,所以我只传递一个 1,用于升序。
现在,问题是我还想按点赞、作者声望和作者评分对课程进行排序,这些将是非常常见的任务,不像按创建排序那样常见,但仍然很常见,我是否应该再添加 3 个索引?还是只使用创建的?
db.lessons.ensureIndex({likes:-1})
db.lessons.ensureIndex({'author.reputation':-1})
db.lessons.ensureIndex({'author.rating':-1})
我觉得我可能使用了太多索引,并且内存中的集合大小可能很大。