MongoDB index定義と作成方法について
URL
date
Oct 28, 2023
slug
mongodb-Indexes-definition-and-practices
status
Published
tags
MongoDB
Basic
Command
Index
summary
MongoDBのindex定義と作成方法について
type
Post
何故indexを使用するのか?
indexは、クエリのスピードを向上させるためのツールで、MongoDB が Index を設定されていない場合、全コレクションをスキャンする。
以下の特徴を持つ。
- indexはコレクションの補完として存在し、特定のキーの順序付けられたリスト。
- index内の各項目は、完全なドキュメントへのポインタを持っている。
- indexの使用はクエリの速度を大幅に向上させる。
- すべてのフィールドにindexを作成すると、挿入時のパフォーマンスが低下する可能性がある。
- 特徴だけ見るとめっちゃ良い感じに見えるが、万能ではない(トレードオフ関係)。適切なindexの選択が必要。
MongoDB indexの作成方法
indexの制限事項 (index Restrictions)
- インデックスは60歳以上の人々のクエリを高速化します。
- 20歳以上の人々の同じクエリは、実行時間が長くなります。
- インデックスを削除すると、クエリの実行時間が実際に短縮される場合があります。
- 多数または全文書を返すクエリは、インデックスを使用すると遅くなる可能性があります。
- 全コレクションスキャンは、すでにすべての文書をメモリに持っているため、速い場合があります。
- 大部分の文書を返すクエリの場合、インデックスは助けにならない可能性があります。
- クエリの結果が文書の小さな部分だけを返す場合、インデックスはほぼ常に速度を上げます。
部分インデックス(partial index)の作成方法
要約
- emailなしの新しいドキュメントを追加すると、重複キーエラー(Duplicate Key Error)が発生。MongoDBは、存在しない値もindex内の値として扱う。
- 解決策:emailフィールドが存在するドキュメントだけをindexに追加する。部分フィルター式(
partialFilterExpression
)を使用。
- 結果:emailなしのドキュメントも追加可能。既存のemailと同じemailで追加すると失敗する。
TTL (Time To Live) indexの作成方法
要約
- TTL indexは自動的にデータを破棄するためのindex。
- Session Dataのような特定の期間後にDataを削除したい場合に役立つ。
createdAt
というfieldを持つデータを例として挙げ、それには現在のタイムスタンプ(Timestamp)が入る。
- 通常の昇順indexとは異なり、TTL indexは
expireAfterSeconds
fieldを使用して設定される。
- この機能は、Date indexまたはDate fieldでのみ機能し、それ以外のfieldでは無視される。
- 新しいドキュメントを追加すると、TTL基準に基づいて既存のドキュメントも再評価される。
- このTTLindexは 単一フィールド のindexでのみ使用でき、複合indexでは機能しない。