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

【MongoDB】$indexStatsで各インデックスの使用回数を追跡する方法

はい、MongoDBでは$indexStats集計ステージを使用することで、クエリ内で各インデックスが使用された回数を追跡できます。この機能を活用すれば、どのインデックスが実際に使われているのか、逆にまったく使われていないのかを把握できるため、インデックスの最適化や不要なインデックスの削除に大変役立ちます。

MongoDBでインデックスを作成する

まず、MongoDBでインデックスを作成するためのクエリを見てみましょう。

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

ドキュメントを含むコレクションを作成する

続いて、ドキュメントを挿入してコレクションを作成します。

> db.demo508.insertOne({"FirstName":"John"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e883818987b6e0e9d18f578")
}
> db.demo508.insertOne({"FirstName":"Chris"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e88381b987b6e0e9d18f579")
}
> db.demo508.insertOne({"FirstName":"David"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e88381f987b6e0e9d18f57a")
}

find()メソッドですべてのドキュメントを表示する

find()メソッドを使用すると、コレクション内のすべてのドキュメントを簡単に確認できます。

> db.demo508.find();

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

{ "_id" : ObjectId("5e883818987b6e0e9d18f578"), "FirstName" : "John" }
{ "_id" : ObjectId("5e88381b987b6e0e9d18f579"), "FirstName" : "Chris" }
{ "_id" : ObjectId("5e88381f987b6e0e9d18f57a"), "FirstName" : "David" }

$indexStatsでインデックスの使用回数を追跡する

以下は、クエリ内で各インデックスが何回使用されたかを追跡するためのクエリです。

> db.demo508.aggregate([{ $indexStats: { } }]).pretty();

実行すると、次のような出力が生成されます。

{
   "name" : "_id_",
   "key" : {
      "_id" : 1
   },
   "host" : "DESKTOP-QN2RB3H:27017",
   "accesses" : {
      "ops" : NumberLong(0),
      "since" : ISODate("2020-04-04T07:32:27.394Z")
   }
}
{
   "name" : "FirstName_1",
   "key" : {
      "FirstName" : 1
   },
   "host" : "DESKTOP-QN2RB3H:27017",
   "accesses" : {
      "ops" : NumberLong(0),
      "since" : ISODate("2020-04-04T07:32:27.527Z")
   }
}

$indexStatsの出力フィールドの意味

  • name: インデックスの名前
  • key: インデックスのキー(対象フィールドとソート順)
  • host: インデックスが存在するホスト名とポート番号
  • accesses.ops: インデックスが使用された操作の累計回数
  • accesses.since: 統計の収集が開始された日時

なお、$indexStatsの統計情報はサーバー起動時またはインデックス作成時から累積されるため、opsの値が0であっても、その後のクエリ実行によって数値は更新されていきます。運用中に定期的に$indexStatsを確認することで、使用されていないインデックスを特定し、ストレージの節約や書き込みパフォーマンスの改善につなげることができます。

  1. MongoDBでSQLのLIKE検索と同じことを実現する方法

    MongoDBにおけるLIKE検索の基本SQLの「LIKE」句のように部分一致でデータを検索したい場合、MongoDBでは find() メソッドと正規表現(//)を組み合わせることで同様の処理を実現できます。この記事では、実際にコレクションを作成し、正規表現を使ったLIKE検索の具体的な手順を解説します。テスト用コレクションの作成まず、サンプルとなるドキュメントを含むコレクションを作成しましょう。ここでは「FirstName」というフィールドを持つドキュメントをいくつか登録します。> db.demo686.insertOne({FirstName:Robert});{ &nb

  2. MongoDBで1つのクエリを使って複数のドキュメントを一括更新する方法(bulkWrite活用ガイド)

    MongoDBで1つのクエリで複数のドキュメントを更新するには?MongoDBで1回のリクエスト(1つのクエリ)で複数のドキュメントを効率的に更新したい場合は、bulkWrite()メソッドを使用します。bulkWrite()は、複数の書き込み操作(insert、update、deleteなど)をまとめてサーバーに送信できるため、個別にクエリを発行するよりもパフォーマンス面で優れています。ここでは、updateOne操作を組み合わせて、複数のドキュメントのフィールドを一度に更新する手順を具体的に解説します。1. コレクションの作成とドキュメントの挿入まず、insertOne()メソッドを使って