2011-08-01 10 views
1

MongoDBを使い始め、インデックスの仕組みを理解しようとしています。私はコレクションにアイテムのリストを持っています。各項目には、増分されるバージョンがあります。その後、すべての以前のバージョン(現在のバージョンよりも少ない)が削除されます(レコードは更新されず、しばらくの間、両方のバージョンが利用可能になります)。アイテムIDとバージョンには複合インデックスがあります。削除するには、$ neと$ ltのどちらを使用するかは、パフォーマンスの点で違いがありますか?

私はそう思わないでしょうが、私はただ確認したいと思います。

答えて

4

$ltの詳細は$neよりも効率的である可能性があります。 Bツリーのインデックス$neは、2つのレンジスキャン($lt$gt)ですが、$ltはただ1つです。

あなたのケースでは、$ltは、とにかく(旧バージョンを見つけるために)あなたが望むものと思われます。 $neを使用した場合は、誤ってより新しいバージョンを削除する可能性があります。これは、存在しないと想定していますが、実際には作成されている可能性があります。 MongoDBはトランザクションやドキュメント間の一貫性のあるビューをサポートしていないことに注意してください。同時更新はあなたにここで噛み付くかもしれません。

1

実際、大きな違いがあります。 "$ne and $nin operators are not selective"は、インデックスがクエリのその部分をまったくスピードアップしないことを意味します。したがって、$ neを使用すると、複合インデックスのバージョン部分はMongoDBでは使用されません。

関連する問題