MongoDBは、あるインデックスが別のインデックスのサブセットである場合、非効率的なクエリパターンを使用しているようです。クエリがMongoidで使用するインデックスを指定することはできますか?
class Model
field :status, :type => Integer
field :title, :type => String
field :subtitle, :type => String
field :rating, :type => Float
index([
[:status, Mongo::ASCENDING],
[:title, Mongo::ASCENDING],
[:subtitle, Mongo::ASCENDING],
[:rating, Mongo::DESCENDING]
])
index([
[:status, Mongo::ASCENDING],
[:title, Mongo::ASCENDING],
[:rating, Mongo::DESCENDING]
])
end
最初のインデックスは両方の場合status
、title
とsubtitle
に照会し、rating
にソートしたときだけstatus
とtitle
上照会してもJavaScriptコンソール状態においてhint()
とともにexplain()
を使用してもrating
のソートに使用されています2番目のインデックスを使用すると4倍高速です。
MongoDBに2番目のインデックスを使用するようにMongoidに指示するにはどうすればよいですか?
笑、面白いです。私の知る限り、mongodbは1つのインデックスしか使用できませんでした。ヒント値にハッシュを入れた理由を少し混乱させます – Ph0en1x
ハッシュヒント値は[[:ステータス、Mongo :: ASCENDING]、[:title、Mongo :: ASCENDING]、[:rating、Mongo: :DESCENDING]] index、それはまだ単一のインデックス –
を使用しているので、それはcompaundインデックスですか?ステータス、タイトル、および評価から。さて、私は参照してください。 – Ph0en1x