次のスキーマを持つドキュメントを含むレッスンのコレクションがあります
{
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})
あまりにも多くのインデックスを使用している可能性があり、メモリ内のコレクション サイズが巨大になる可能性があります。