0

この単純なオブジェクトの何百万ものインスタンスのコレクションがあります。

{
 Org: string,
 Value: string
}

[Org]フィールドごとのセカンダリインデックスがあり、約数千の異なる[Org]値があります。このコレクションは一度に1回入力されるため、更新されることはありません。

今、私はタスクを持っています:自然な順序(つまり、データベースに挿入された順序)で[Value]特定の値を要求し、特定の数によって制限され、最大のパフォーマンスを発揮します。私の質問は次のとおりです。[Org]$orderby: _id

  • orderby、、のような演算子の順序はquery、ケースのパフォーマンスと実行プランに影響limitを与えますか?sort

  • 両方のインデックス(セカンダリby[Org]とデフォルトのプライマリby _id)がクエリで使用されますか?

  • SQLServer用のQueryAnalyzerのようなインデックスの使用状況を追跡するためのMongoDb用のツールはありますか?

4

1 に答える 1

1

explain()クエリがインデックスをどのように使用しているかを確認するために探しています。返された「カーソル」によって、使用しているインデックスを確認できます。いくつかの主要な統計情報は、、、、、nscannedです。nscanAndOrdermillis

注意すべき重要な点の1つは、mongodbはクエリごとに1つのインデックスしか使用できないということです。

はい、並べ替えはパフォーマンスに影響します。クエリで並べ替えを使用するには、並べ替えるフィールドのインデックスの最後のフィールドを持つインデックスが必要です。{org:1, _id:1}したがって、クエリと並べ替えを最適化するために、にインデックスを作成できます。scanAndOrderその後、それは誤りになることに気付くでしょう。

更新:言及するのを忘れましたlimitlimitmongoに検索を短くする機会を与えるため、通常はパフォーマンスが向上します。インデックス付きフィールドで並べ替えている場合に役立ちlimitます。そうでない場合は、探している結果を返す前にすべての結果をスキャンする必要があります。

于 2012-09-21T01:16:25.180 に答える