Understanding Indexing in MongoDB

TLDR: Indexing is just a way of grouping documents, dividing collections into groups to speed up performance

概要

インデックスは検索と同様にクエリーパフォーマンスを向上します

MongoDBにおけるインデックスのアイデアは、本のインデックスと似ており、ページを見つけるスピードを向上させています。 MongoDB のインデックスはドキュメントを見つける速度を向上させます

インデックスはどのように機能するのか

まず、MongoDB でどのようにインデックスを宣言するかを理解しましょう

collectionName.createIndex({field:value}) //for creating indexcollectionName.dropIndex({field:value}) //for removing index

ここでフィールドはインデックスされる “fieldName” です。 「

インデックスの種類を定義します。1 や -1 は find() クエリのパフォーマンスを上げるのに対し、 “text” は検索に使われます。 昇順 = -1

さて、インデックスがどのように機能するかですが、

ユーザーのコレクションを想像してみてください。各ドキュメントはさまざまな情報を含んでおり、そのうちの1つはスコアです。

インデックスが存在しない場合、MongoDB は各ドキュメントを調べて、クエリしたドキュメントを見つけます。これはコレクション スキャンと呼ばれ、MongoDB ではこの略語として COLLSCAN (Relational Databases ではテーブル スキャンと呼ばれます) を使用しています。 これで、データベース全体をスキャンするのではなく、そのテーブルをスキャンするだけでよくなります。 これははるかに高速です。

インデックスは MongoDB がスキャンするデータセットを絞り込むのに役立ちます。 これはインデックススキャンと呼ばれ、MongoDB ではこの略語も IXNSCAN

ここで、スコアインデックスとそのマッピングを視覚的に表現してみましょう。

インデックス付きのフィールドとインデックスなしのフィールドの 2 つのクエリを比較することにより、自分で比較することができます

db.<collection name>.find(query).explain()

オブジェクトが返されます

オブジェクトが返された後、そのオブジェクトを削除します。winingPlan.ステージは、スキャンのタイプ COLLSCAN または IXNSCAN

を伝えますが、実行にかかった時間は伝えません

find

などのクエリーメソッドの前に explain(‘executionStat’) メソッドを使用します。

db.<collection name>explain('executionStat').find(query)

executionTimeMillis で実行時間がわかる

Downside of Index

Indexes are not free, インデックスには容量がかかる。 インデックスは読み込み速度を向上させますが、何かが書き込まれるたびに、インデックスを更新する必要があります。

B-Tree

インデックスはグループのテーブルではなく、概念的にはB-Tree (バイナリツリー) で、MongoDBだけでなくSQLデータベースでもインデックス作成にB-Treeを使っています

この動画はB-Treeについて最もよく説明しています

コメントを残す

メールアドレスが公開されることはありません。