🍃

MongoDB基礎6:インデックス

2021/10/14に公開

引き続き、MongoDB Universityで提供されているオンラインコース"MongoDB Basics"の要点をまとめていきます。今回はChapter5の続き - "Indexes"です。

インデックスとは?

インデックスは、本でいうところの索引に当たります。巻末にある、あいうえお順に並んだフレーズとそフレーズが使用されているページ数が列挙してあるあの付録です。

ある特定のワードが使われているページを、索引を使って探すのが速い事と同じように、MongoDBでもインデックスの使用がよりクエリの実行を効率的にしてくれます。

インデックスの使い所

インデックスは、クエリ実行のサポートをしてくれます。特定のキーでソートをかけてクエリを実行することが多い時などは、まさにインデックスの使い所です。

例えば、以下のような世紀末に生まれた友人のクエリを実行したいとします。

db.friends.find({birth year: '1999'})

この時、事前にbirth yearのインデックスを作成しておきました。

すると、世紀末に生まれた友人のクエリを次に実行する時には、全ての友人ドキュメントにアクセスはせず、世紀末生まれの友人のドキュメントに直行してくれるので1度目より速くなります。

インデックスの作り方

インデックスを作成するには以下のメソッドを使います。

db.collection.createIndex( {<インデックスに指定したいキー名>: <昇降順>} )

昇降順では1-1を選択することができます。1が昇順、-1が降順です。

例.友人コレクションで身長が高い順インデックスを作成。
db.friends.createIndex(height: -1)

単体インデックスと複合インデックス

単体インデックス

キーを1つだけ指定したインデックスは単体インデックスです。

db.friends.createIndex(height: -1)

先ほど例にあげたインデックスが該当します。

複合インデックス

キーを2つ以上指定したインデックスは複合インデックスです。

db.collection.createIndex( {key1: 1, key2: -1} )

複合インデックスでは先に指定したキー(key1)の方からインデックスがされます。以下のようなクエリを実行するケースでその効果を発揮してくれそうです。

db.collection.find({key1: value}).sort({key2: 1})

まとめ

  • インデックスを登録することでクエリの実行を効率化することができる。

ひとまず、MongoDB基礎クラスの内容は大まかにカバーできたと思います。コンテンツが充実していてためになりました。今後は、MongoDB Universityのレクチャーの中で面白そうなトピックを切り抜いて記事にしたいです。

参照

https://docs.mongodb.com/manual/indexes/

Discussion