2

与えられたクエリを満たす、フィールドch(コレクション内のエントリのフィールドcに含まれるサブドキュメントのフィールドh)のすべての異なる可能な値の数をできるだけ速く取得したいと思います:{p:[ a_int]、r:[a_bool]}

私の最初の推測は、インデックスを作成することでした:{p:1、r:1、 "ch":1}

それが正しいか ?はっきりとそれを正しく使用しますか?

私はmongo2.0.1を使用しています

編集:jiraチケットで、クエリの統計を取得できることがわかりました。ただし、レプリカセットで使用した場合にのみ機能します(シャーディングでモンゴスから実行した場合は機能しません)。クエリは少なくとも{p:1、 "ch":1}のインデックスを正しく使用しているように見えるので、完全なインデックスを使用しようとします。

EDIT2:完全なインデックスは期待どおりに機能します。

4

1 に答える 1

1

シャード環境で個別に Explain() が機能しない場合は、「ブルート フォース」アプローチを取ることができます。テストするインデックスを明示的に指定するには、hint() を使用して、結果を比較します。

http://www.mongodb.org/display/DOCS/Optimization#Optimization-Hint

使用されるインデックスに関する疑いを取り除くだけでなく、オプティマイザーが新しいクエリ プランを試すのを待っていないことも意味します (クエリに対して最初に選択されたインデックスをしばらくの間キャッシュします)。

もちろん、シャード キーはここで大きな影響を与えます。そのキーに基づくデータの分散は、制限要因になる可能性があります (スキャッター/ギャザー アプローチに勝るデータの局所性)。

于 2012-03-09T10:52:58.627 に答える