1

この質問はやや奇妙ですが、私は私の現在の実装でそれにぶつかりました:

アプリケーションのすべてに対して特権挿入を実行したいのですが、コマンド$hintを使用してmongoにインデックスを使用させないようにすることもできると思いました。

それは可能ですか?$ hintが何をすることになっているのかを考えると、それは健全な質問ですか?

ありがとう

4

2 に答える 2

6

クエリオプティマイザにインデックスを使用しないように強制するには(テーブルスキャンを実行)、次を使用します。

db.collection.find()。hint({$ natural:1})

ただし、これで目的が達成されるかどうかはわかりません(他のアクティビティよりも挿入を優先します)。

于 2012-12-12T12:37:02.650 に答える
5

インサートがあなたの思ったように機能するとは思いません。

挿入は、コレクション自体のインデックスの数に応じて、必要なフィールドをbtreeにカタログします。そのため、特権の挿入では、コレクションのすべてのインデックスを破棄する必要があります。

その$naturalため、順序ヒントを使用しても、読み取りと書き込みの順序に違いはありません。順序は言うまでもなく$natural、ディスク挿入インデックスです。クエリで効果的に使用できないインデックスであるため、全表スキャンが強制されます。

ただし、btreeの維持はデータの挿入の一部であるため、実際には何も特権がありません。そのため、インデックスを介して挿入に優先順位を付ける方法はありません。

また、書き込みロックと読み取りロックはまったく異なるものなので、あなたの質問が理にかなっているかどうかはわかりません。

データを読み取る前にデータを更新または挿入するために、アトミックロックを探すのが好きですか?

于 2012-12-12T13:01:18.553 に答える