2017-02-07 15 views
2

私はmongodbをlocalhostに持っています。データベースには9000万レコードあります。 db.emails.find({"name":"example"})でレコードを検索すると、結果が出るのに時間がかかりすぎます。 mongodbのスピードを上げる方法はありますか?あなたは、フィールドのインデックスを持っていない場合は、MongoDBのクエリを実行するとき、すなわち、収集スキャンを行うnameの値をチェックするために、コレクション内のすべての文書をスキャンする必要がありますMongodbがレコードを見つけるのに時間がかかりすぎる

db.emails.createIndex({ name: 1}) 

答えて

3

nameフィールドのindexを作成します。フィールドに入力します。他の手のこのインデックスは、すぐに確認できるnameフィールドの値を注文しました。

インデックスキーには制限があります。索引項目の合計サイズは1024バイト未満でなければなりません。あなたは、文字列の内容でクエリを検索したい場合しかし、あなたはテキストインデックスを使用することができます。

db.emails.createIndex({ name: "text"}) 

また、あなたが完全に一致を検索したい場合は、あなたがハッシュされたインデックスを使用することができます高速化するために通常

+0

多くをスピードアップと考えている

db.users.find({_id:/@gmail.com/})

のような検索を実行することができ "OK":0、 "ERRMSG": "WiredTigerIndex ::挿入:5452を失敗し、インデックスには大きすぎるキー、{:\" Bandaancha39escalones.es4everexiliados.creatuforo.com7artpictures.com7peliculas.coma3magazine.comadictasalcibersexo.comaestrada.netagente69.comanimeid。 .. \ "}"、 "code":17280、 "コード名前: "KeyTooLong" } –

+0

ありがとう@Sergey。 –

+0

通常の検索では非常に高速ですが、そのようなクエリを実行すると時間がかかります。 類似のクエリの速度を向上させるための提案。 クエリの例:db.web_tech.find({url:/.* sa。* /})。count() –

0

をmongodbのクエリでは、合成インデックスを準備することができます。

あなたのケースでは、それは電子メールアドレスなので、私があなたがするべきことは、メールをIDとして入れ、大文字と小文字を区別しない正規表現を使って検索を実行することです。あなたがGmailアカウントを持っている誰もが欲しい場合たとえば、あなたはこのエラー を{得た、私はこれはあなたのコード私は、同じ機能を使用して索引をcareated

関連する問題