MongoDBでインデックスを再構築する方法【reIndex()の使い方を解説】
MongoDBでインデックスを再構築するには?
MongoDBで既存のインデックスを再構築(リビルド)したい場合は、reIndex()メソッドを使用します。このメソッドは、コレクション上のすべてのインデックスを一度削除し、再度作成し直す動作を行います。
ここでは、実際にインデックスを作成してから、reIndex()で再構築するまでの手順を順番に見ていきましょう。
ステップ1:まずはインデックスを作成する
はじめに、createIndex()を使ってコレクションにインデックスを作成します。以下のクエリを実行してください。
> db.demo42.createIndex({"StudentFirstName":1});このクエリを実行すると、次のような出力が得られます。
{
"createdCollectionAutomatically" : true,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}出力内容を見ると、「numIndexesBefore」が1から「numIndexesAfter」が2に増えていることから、新しくインデックスが1つ追加されたことが確認できます。また「createdCollectionAutomatically」がtrueになっているため、コレクションが存在しない場合は自動的に作成されたこともわかります。
ステップ2:reIndex()でインデックスを再構築する
続いて、MongoDBでインデックスを再構築するためのクエリがこちらです。
> db.demo42.reIndex({"StudentFirstName":1});実行すると、以下のような結果が出力されます。
{
"nIndexesWas" : 2,
"nIndexes" : 2,
"indexes" : [
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "web.demo42"
},
{
"v" : 2,
"key" : {
"StudentFirstName" : 1
},
"name" : "StudentFirstName_1",
"ns" : "web.demo42"
}
],
"ok" : 1
}出力には、再構築後のコレクションに存在するすべてのインデックス情報が含まれています。「_id_」はMongoDBが自動的に作成するデフォルトインデックスであり、もう一方の「StudentFirstName_1」が先ほど作成したインデックスです。「ok : 1」と表示されていれば、再構築が正常に完了したことを意味します。
reIndex()使用時の注意点
reIndex()はコレクション内の全インデックスを削除して作り直すため、データ量が大きいコレクションでは処理に時間がかかり、その間データベースに負荷がかかる可能性があります。本番環境で実行する場合は、トラフィックの少ない時間帯を選ぶなど、慎重な運用を心がけましょう。
-
MySQLのテーブル・インデックスの再構築と修復方法を徹底解説
テーブルの再構築とはテーブルやインデックスへの変更は、MySQLがデータ型や文字セットをどのように扱うかに関わってきます。必要なテーブルの修復やアップグレードについては、CHECK TABLE、mysqlcheck、mysql_upgradeによって報告されます。テーブルを再構築する3つの方法テーブルを再構築する方法はいくつかありますが、代表的なものとして以下の3つが挙げられます。ダンプ&リロード方式(mysqldump)ALTER TABLE方式REPAIR TABLE方式それぞれの方法を順番に見ていきましょう。ダンプ&リロード方式バイナリ(インプレース)アップグレードやダウンロードの後、異
-
MongoDBで未使用のインデックスを検索する方法 ― $indexStats活用の6つのポイント
MongoDBはバージョン3.2以降、すべてのインデックスに対して使用状況の統計情報を追跡しています。これらの統計へアクセスするために、MongoDBは$indexStatsアグリゲーションパイプラインステージを提供しています。この記事では、MongoDBで未使用のインデックスを特定する際に押さえておきたい6つのポイントを解説します。例えば、次のコマンドを実行すると、コレクション「test.foo」のインデックス統計を取得できます。db.foo.aggregate( [ { $indexStats: { } } ] )参考: $indexStatsに関する公式ドキュメント$indexStats