sql >> データベース >  >> NoSQL >> MongoDB

何百万ものレコードがある場合、Mongoのカウントは非常に遅くなります

    インデックス付けされているかどうかに関係なく、カウントクエリは、MongoDBが条件に一致する適切な数のドキュメントを見つけるために完全なBツリーウォークを実行する必要があるため、低速です。これは、MongoDBのbツリー構造が「カウント」されないためです。つまり、各ノードはノード/サブツリー内の要素の量に関する情報を格納しません。

    この問題はここで報告されます https://jira.mongodb.org/browse/SERVER-1752 現在、パフォーマンスを向上させるための回避策はありませんが、そのコレクションのカウンターを手動で維持する以外に、明らかにいくつかの欠点があります。

    また、db.col.count()バージョン(基準がないため)は大きなショートカットを使用でき、実際にはクエリを実行しないため、速度が速いことに注意してください。とはいえ、すべての要素を返す必要があるカウントクエリと同じ値を常に報告するとは限りません(たとえば、書き込みスループットが高いシャード環境にはありません)。それがバグかどうかは議論の余地があります。そうだと思います。

    2.3以降では、インデックス付きフィールドのカウントのパフォーマンスを改善する必要がある(そして改善する)重要な最適化が導入されたことに注意してください。参照: https://jira.mongodb.org/browse/SERVER-7745



    1. シェルスクリプトでmongodbの結果を使用する

    2. 配列にある複合型のフィールドの名前を変更します

    3. Redisluaスクリプトが機能しない

    4. キースペースイベントを再起動しません-起動しません