我有经验的集合,它包含文件与下面的模式索引:我有太多索引吗?
{
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)
由于这是一个非常普遍的查询和经验收集将是我系统中最大的收集,我想尽可能优化它,所以我做了一个索引创建
db.lessons.ensureIndex({created:-1})
但有时我想从一类
db.lessons.find({category:1}).sort({created:-1}).limit(18)
所以我也加入类的指数,因为如果我不,蒙戈可以排序很容易,但它仍然有通过检查元素得到的只是教训因此,
db.lessons.ensureIndex({category:1})
因为我不按类别排序,我只是通过1,为升序。
现在,问题是我还想根据喜欢,作者的声望和作者的评价排序课,这些将是非常常见的任务,不像通过创建排序一样普通,但仍然很常见,如果我添加3个以上指数?或者只是使用创建的?
db.lessons.ensureIndex({likes:-1})
db.lessons.ensureIndex({'author.reputation':-1})
db.lessons.ensureIndex({'author.rating':-1})
我觉得我可能会使用太多的索引,并且内存中的集合大小可能会很大。
有没有原因你的第二个索引不是{category:1,created:-1}?没有第二部分,排序必须发生在内存中,这种内存更密集且速度更慢。 –
您是否还可以添加关于您将拥有多少文档(近似最大值)的信息以及您允许的排序将在整个结果集上还是仅在每个子类别中添加信息? –