私はMongoDB2.0.3(Mongoid経由)をruby(1.9.3)アプリで使用しています。
次のような複合インデックスがあります。
index [
[:attr1, Mongo::ASCENDING],
[:attr2, Mongo::ASCENDING],
[:attr3, Mongo::ASCENDING],
[:attr4, Mongo::ASCENDING]
]
そして、次のようなクエリ:
Model.where(:attr3.ne => true, :attr4.ne => true).
extras(:hint => { :attr1 => Mongo::ASCENDING,
:attr2 => Mongo::ASCENDING,
:attr3 => Mongo::ASCENDING,
:attr4 => Mongo::ASCENDING })
次に、私のコードは結果を変更して更新します。上記のrubyアプリケーションを実行しているプロセスがいくつかあり、すべてsavemongodbサーバーにアクセスしています。私はかなり大きなデータベース(30milレコード以上、サイズ95GB)を持っており、アプリによって常に読み取り/書き込みが行われています。
クエリがインデックスを使用する場合と使用しない場合があるという問題が発生しています(mongoシェルのdb.currentOp()を使用)。なぜそれが起こっているのですか、どうすれば修正できますか?