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では機能しない。

© EndlessDev2016 2021 - 2025