0

これは設計上の問題です。以下に示すように、キーワードにインデックスを付けているかどうか教えてください。

obj = {
    name: "Apollo",
    text: "Some text about Apollo moon landings",
    tags: [ "moon", "apollo", "spaceflight" ]
}

このようなインデックスを確保します。

db.articles.ensureIndex( { tags: 1 } );

および頻繁なクエリは次のとおりです。

db.articles.findOne( { tags: "apollo" } ).name

そのようなドキュメントが挿入されている場合、そのようなクエリのパフォーマンスを教えてください。

それは O(1) ですか?

また、そのようなデータで正規表現を検索した場合のパフォーマンスは?

4

2 に答える 2

3

これは、ほぼすべてのデータベースと同様に B ツリー インデックスであるため、ルックアップ時間は O(log n) です。

正規表現検索は、完全なテーブル スキャンまたは完全なインデックス スキャンを実行する必要があるように聞こえますが、どちらも O(n) です。式がプレフィックスで固定されている場合は、範囲だけをスキャンする必要がありますが、それでも O(n) としてカウントされると思います。

于 2012-08-02T11:54:34.697 に答える
2

Thiloが述べたように、MongoDBインデックスは「Bツリー」インデックスとして実装され、基本的に、MongoDBのインデックスは他のデータベースシステムのインデックスと操作上類似しています。ここにMongoDBのインデックスの概要があります。

実装、管理、および設計に役立つインデックス作成戦略インデックス作成操作について読むことをお勧めします。

クエリのパフォーマンスを分析し、クエリの実行内容を確認するために、explain()演算子をクエリに追加できます。その出力の詳細と解釈方法については、こちらをご覧ください。explain()

MongoDBは、正規表現にPCREを使用します。使用法はここに記載されています。PCREライブラリ以外のサイズ制限はありません。すべての正規表現と同様に、不十分に構築された正規表現の結果を覚えておいてください:)

于 2012-08-02T12:36:03.783 に答える