3

質問がばかげている場合は申し訳ありません。私はデータベースのインデックス作成全体に不慣れで、以下のコマンドを発行したかどうかを知りたいです

> db.posts.ensureIndex({location:"2d"})

新しいエントリが投稿された場​​合でも、データベースは常にインデックス化されますか? または、新しいエントリごとにこのコマンドを入力する必要がありますか?

また、インデックス作成は、2000 以上のエントリを持つデータベースに大きな違いをもたらしますか?

4

3 に答える 3

3

インデックスが配置されると、それ以降の読み取りと書き込みに常に使用されます。コマンドを実行し続ける必要はありません。

既存の大規模なデータ セットに対して を発行するensureIndexと、そこにあるすべてのものにすぐにインデックスが作成され、ブロックされる可能性があることに注意してください。

インデックス作成のアドバイスに関する公式の FAQ 全体がここにあります: http://www.mongodb.org/display/DOCS/Indexing+Advice+and+FAQ
実行しているクエリの種類に一致するインデックスを作成する必要があります。また、非常に使いやすく、explainクエリにかかる時間を確認できます。特定の種類のクエリを何度も実行していることがわかった場合は、適切にインデックスを作成してパフォーマンスを向上させることができます。

MongoDB には、クエリがどのように処理されているか、特にインデックスを使用しているかどうかを判断するための Explain コマンドが含まれています。Explain は、ドライバーからもシェルからも使用できます。

db.comments.find({ tags : 'mongodb'}).sort({ created_at : -1 }).explain();
これにより、スキャンされたアイテムの数、ミリ秒単位でのクエリの処理時間、クエリ オプティマイザーが試行したインデックス、最終的に使用されたインデックスなど、多くの有用な情報が返されます。

于 2012-06-27T16:43:48.093 に答える
1

または、新しいエントリごとにこのコマンドを入力する必要がありますか?

いいえ。DB のエントリが更新されると、インデックスも更新されます。

また、インデックス作成は、2000 以上のエントリを持つデータベースに大きな違いをもたらしますか?

言うのは簡単ではありません。実行しているクエリと、MongoDB がメモリ内に保持しているデータの量によって異なります。

クエリが 2000 エントリのほとんどをロードすることになる場合、インデックスはあまり機能しない可能性があります。クエリがエントリを 1 つしかロードしない場合は、おそらくインデックスが役に立ちます。

于 2012-06-27T16:43:57.243 に答える
1

MongoDB でのインデックス作成は、他のリレーショナル データベース サーバー (SQLServer、MySQL など) でのインデックス作成と同様に機能し、同じ長所と短所があります。

  • インデックスは読み取りを大幅に高速化できます
  • インデックスは書き込みを多少遅くする可能性があります (書き込みは、データとインデックス情報を保持する btree の両方を更新する必要があります)

アプリケーションが読み取り負荷が高い場合、適切なインデックスを配置すると、DB の応答時間が大幅に改善されます。jdiが投稿した 10Gen Indexing リンクをたどってください。これは素晴らしい出発点です。

于 2012-06-27T16:55:59.410 に答える