MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBでレコード検索が遅い原因とは?インデックスを使った高速化の手順を解説

MongoDBで特定のレコードを検索する際、インデックスが設定されていないコレクションでは、すべてのドキュメントを先頭から順に走査する「コレクションスキャン」が行われるため、データ量が増えるほど検索に時間がかかってしまいます。この問題を解決するには、検索対象となるフィールドにインデックスを作成するのが最も効果的です。

インデックスの作成方法

まずは createIndex() メソッドを使って、検索によく使うフィールド(ここでは StudentName)にインデックスを作成します。指定したコレクションが存在しない場合は、自動的に作成されます。

> db.decreasetimeusingindex.createIndex({"StudentName":1});
{
    "createdCollectionAutomatically" : true,
    "numIndexesBefore" : 1,
    "numIndexesAfter" : 2,
    "ok" : 1
}

実行結果を見ると、「numIndexesBefore」が1(_id のデフォルトインデックスのみ)だったのに対し、「numIndexesAfter」が2になっていることから、新しいインデックスが正常に追加されたことがわかります。

テスト用ドキュメントの挿入

次に、insertOne() メソッドを使ってサンプルデータを数件挿入します。

> db.decreasetimeusingindex.insertOne({"StudentName":"John Smith","StudentAge":21});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e03960af5e889d7a51994ff")
}
> db.decreasetimeusingindex.insertOne({"StudentName":"John Doe","StudentAge":24});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e039611f5e889d7a5199500")
}
> db.decreasetimeusingindex.insertOne({"StudentName":"Adam Smith","StudentAge":22});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e03961df5e889d7a5199501")
}

全ドキュメントの表示

find() メソッドに pretty() を組み合わせると、コレクション内のすべてのドキュメントを見やすい形式で表示できます。

> db.decreasetimeusingindex.find().pretty();

上記のクエリを実行すると、次のような出力が得られます。

{
    "_id" : ObjectId("5e03960af5e889d7a51994ff"),
    "StudentName" : "John Smith",
    "StudentAge" : 21
}
{
    "_id" : ObjectId("5e039611f5e889d7a5199500"),
    "StudentName" : "John Doe",
    "StudentAge" : 24
}
{
    "_id" : ObjectId("5e03961df5e889d7a5199501"),
    "StudentName" : "Adam Smith",
    "StudentAge" : 22
}

特定のレコードを検索する

続いて、条件を指定して特定のレコードを検索します。ここでは StudentName が「Adam Smith」であるドキュメントを取得します。

> db.decreasetimeusingindex.find({"StudentName":"Adam Smith"});

実行結果は以下の通りです。

{ "_id" : ObjectId("5e03961df5e889d7a5199501"), "StudentName" : "Adam Smith", "StudentAge" : 22 }

まとめ

インデックスを作成しておくことで、MongoDBはコレクション全体を走査することなく、Bツリー構造のインデックスを利用して該当ドキュメントへ直接アクセスできるようになります。その結果、大規模なコレクションでもレコード検索を大幅に高速化できます。検索やソートで頻繁に使用するフィールドには、あらかじめ createIndex() でインデックスを設定しておくことをおすすめします。

  1. Windowsシェルエクスペリエンスホストとは?メモリ消費が高くなる原因と対処法

    Windows 10のパソコンを使用していると、メモリを大量に消費するプログラムやサービスに遭遇することがあります。普段あまり意識していない方も、一度タスクマネージャーを開いて各プロセスのメモリ使用量を確認してみると、思わぬ発見があるかもしれません。Windows 10では、「Windowsシェルエクスペリエンスホスト」がメモリを大量に消費する原因となるケースが少なくありません。この記事では、Windowsシェルエクスペリエンスホストの概要と、メモリやCPUの過剰消費を解決するための具体的な方法をご紹介します。Windowsシェルエクスペリエンスホストとは?ユニバーサルWindowsアプリは、

  2. なぜ今LastPassの代替品を探すべきなのか?無料版の変更点と乗り換え手順を徹底解説

    ここ数年、LastPassは間違いなく無料パスワードマネージャーの定番でした。多くのユーザーが求める豊富な機能を、1円も支払うことなく利用できたからです。しかし、2021年3月16日以降、LastPassの無料プランユーザーは、パソコンかスマートフォンのどちらか一方でしかサービスを利用できなくなります。 具体的に何が変わったのか? 今回の仕様変更により、無料プランのユーザーは、複数デバイスから保存済みパスワードへ無制限にアクセスすることができなくなりました。2021年3月16日以降、認証情報の閲覧・管理はパソコンまたはスマートフォンのどちらか一方に限定されます。ユーザーはまもなく、ボールト(保