MongoDB を実行して、3 列のキー ルックアップ (a、b、c) を優先順位 (d) でキューに入れようとしています。私は(pymongo構文)のようなクエリを持っています:
collection.find({'a':'foo','b':'bar','c':'baz'}, sort = [('d', -1)] )
複合インデックス (a+1、b+1、c+1、d-1) を使用して Explain を実行すると、フル テーブル スキャンと BasicCursor が表示されます。
d に単一のインデックスがある場合、explain は d インデックスのみが使用されていることを示します。
大きなテーブルの場合、私が本当に望んでいるのは、複合インデックスを使用することです。どうすればこれを機能させることができますか?
INDEX_INFORMATION: {u' id ': {u'key': [(u'_id', 1)], u'v': 1}, u'color_1_level_1_in_progress_1_Ranking_-1': {u'key': [(u' color', 1), (u'level', 1), (u'in_progress', 1), (u'Ranking', -1)], u'v': 1}}
EXPLAIN ON A FIND+SORT QUERY
db.coll.find({'level' : {'$in' : [0,1,2]}, 'in_progress' : 0, 'color' : {'$in' : ['Red', 'Blue', 'Green]} }, sort = [('Ranking', -1)] ).explain()
OUTPUT ON EXPLAIN
OperationFailure: database error: too much data for sort() with no index. add an index or specify a smaller limit
THE QUEUEING QUERY I CARE ABOUT OPTIMIZING
coll.find_and_modify(
query = {'level' : {'$in' : [0,1,2]}, 'in_progress' : 0, 'color' : {'$in' : ['Red', 'Blue', 'Green']} },
sort = {'Ranking' : -1},
update = {'$set': {'in_progress': 1}}
)
並べ替えフィールド「ランキング」にインデックスを追加すると、ランキング インデックスが使用されているという説明が返されることに注意してください。ただし、複合インデックスは使用されず、1.5 MM のドキュメント テスト コーパスではパフォーマンスが非常に遅くなります。