【MongoDB】インデックスを追加する

2019年3月3日

インデックスとは?

データベースにはインデックスというものがあります。インデックスはデータベース内のデータ検索を早くするための仕組みです。詳しい仕組みはこの記事では説明しませんが、コレクションのフィールド(RDBであればテーブルのカラム)にインデックスを定義し、検索時にそのインデックスを元にデータを走査することで検索が早くなるようです。

コレクションにインデックスを追加する

MongoDBのコレクションにインデックスを追加します。以下で使用するデータベース名やコレクション名は私が現在使用しているものなので、使用される際は読み替えてください。

※以下の手順はmongo shell上で行います。

現在のインデックス設定を確認する

現在のインデックス設定を確認するには以下のコマンドを使用します。

> use trade_database # 使用するデータベースへ切り替え

> db.trade_data.getIndexes() # trade_dataはコレクション名
[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_",
		"ns" : "trade_database.trade_data"
	}
]

インデックスを特に指定していない状態ですが、idは標準でインデックスが貼られた状態です。

インデックスを追加する

今回はdateフィールドをインデックスに追加します。以下のようにコマンドを入力します。

> db.trade_data.createIndex({ "date" : 1})
# 以下実行結果
{
       "createdCollectionAutomatically" : false,
       "numIndexesBefore" : 1,
       "numIndexesAfter" : 2,
       "ok" : 1
}

この状態でもう一度インデックスを確認します。

> use trade_database # 使用するデータベースへ切り替え

> db.trade_data.getIndexes() # trade_dataはコレクション名
# 以下実行結果
[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_",
		"ns" : "trade_database.trade_data"
	},
	{
		"v" : 2,
		"key" : {
			"date" : 1
		},
		"name" : "date_1",
		"ns" : "trade_database.trade_data"
	}
]

dateがインデックスに追加されています。

インデックスを削除する

インデックスは検索を早くするのですが、代わりにインデックスを貼ったフィールドのデータを実際のコレクションの値とは別に保持したりするため、データ容量を必要以上に喰ってしまう可能性があります。不要なインデックスは削除しましょう。

以下のコマンドでインデックスを削除できます。(dateのインデックスを削除します)

db.trade_data.dropIndex({ "date" : 1})