質問がばかげている場合は申し訳ありません。私はデータベースのインデックス作成全体に不慣れで、以下のコマンドを発行したかどうかを知りたいです
> db.posts.ensureIndex({location:"2d"})
新しいエントリが投稿された場合でも、データベースは常にインデックス化されますか? または、新しいエントリごとにこのコマンドを入力する必要がありますか?
また、インデックス作成は、2000 以上のエントリを持つデータベースに大きな違いをもたらしますか?
質問がばかげている場合は申し訳ありません。私はデータベースのインデックス作成全体に不慣れで、以下のコマンドを発行したかどうかを知りたいです
> db.posts.ensureIndex({location:"2d"})
新しいエントリが投稿された場合でも、データベースは常にインデックス化されますか? または、新しいエントリごとにこのコマンドを入力する必要がありますか?
また、インデックス作成は、2000 以上のエントリを持つデータベースに大きな違いをもたらしますか?
インデックスが配置されると、それ以降の読み取りと書き込みに常に使用されます。コマンドを実行し続ける必要はありません。
既存の大規模なデータ セットに対して を発行する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();
これにより、スキャンされたアイテムの数、ミリ秒単位でのクエリの処理時間、クエリ オプティマイザーが試行したインデックス、最終的に使用されたインデックスなど、多くの有用な情報が返されます。
または、新しいエントリごとにこのコマンドを入力する必要がありますか?
いいえ。DB のエントリが更新されると、インデックスも更新されます。
また、インデックス作成は、2000 以上のエントリを持つデータベースに大きな違いをもたらしますか?
言うのは簡単ではありません。実行しているクエリと、MongoDB がメモリ内に保持しているデータの量によって異なります。
クエリが 2000 エントリのほとんどをロードすることになる場合、インデックスはあまり機能しない可能性があります。クエリがエントリを 1 つしかロードしない場合は、おそらくインデックスが役に立ちます。
MongoDB でのインデックス作成は、他のリレーショナル データベース サーバー (SQLServer、MySQL など) でのインデックス作成と同様に機能し、同じ長所と短所があります。
アプリケーションが読み取り負荷が高い場合、適切なインデックスを配置すると、DB の応答時間が大幅に改善されます。jdiが投稿した 10Gen Indexing リンクをたどってください。これは素晴らしい出発点です。