logo

データベースのインデックス作成 – セット 1

インデックス作成により、クエリを実行するために必要なディスクへのアクセス数が最小限に抑えられ、データベースのパフォーマンスが向上します。これは、データベース内のデータを見つけて迅速にアクセスするために使用されるデータ構造技術です。インデックスの生成には、いくつかのデータベース フィールドが使用されます。テーブルの主キーまたは候補キーが最初の列 (検索キー) に複製されます。データの取得を高速化するために、値もソートされた順序で保持されます。データを並べ替える必要がないことに注意してください。 2 番目の列はデータ参照またはポインターで、特定のキー値が見つかるディスク ブロックのアドレスを保持するポインターのセットが含まれます。

データベースのインデックスの構造

インデックス作成の属性

  • アクセスタイプ: 値ベースの検索、範囲アクセスなどのアクセスの種類を指します。
  • アクセス時間: これは、特定のデータ要素または要素のセットを見つけるのに必要な時間を指します。
  • 挿入時間: これは、適切なスペースを見つけて新しいデータを挿入するのにかかる時間を指します。
  • 削除時間: 項目の検索と削除、およびインデックス構造の更新にかかる時間。
  • スペースオーバーヘッド: これは、インデックスに必要な追加スペースを指します。

データベースのインデックスの構造



一般に、データを保存するためのインデックス作成方法に続く 2 種類のファイル編成メカニズムがあります。

シーケンシャル ファイル構成または順序付けされたインデックス ファイル

この場合、インデックスは値のソートされた順序に基づいています。これらは一般に高速で、より伝統的なタイプの保存メカニズムです。これらの順序付けまたは順次ファイル編成では、データが密な形式または疎な形式で保存される場合があります。

  • 密なインデックス
    • データ ファイル内のすべての検索キー値に対して、インデックス レコードが存在します。
    • このレコードには、検索キーと、その検索キー値を持つ最初のデータ レコードへの参照が含まれています。

密なインデックス

  • スパースインデックス
    • インデックス レコードは、データ ファイル内のいくつかの項目に対してのみ表示されます。図に示すように、各項目はブロックを指します。
    • レコードを見つけるには、探している検索キー値以下の最大の検索キー値を持つインデックス レコードを見つけます。
    • インデックス レコードが指すレコードから開始し、目的のレコードが見つかるまでファイル内のポインターに沿って (つまり、順番に) 処理を進めます。
    • 必要なアクセス数=log₂(n)+1、(ここでn=インデックスファイルが取得したブロック数)

スパースインデックス

ハッシュファイルの構成

インデックスは、さまざまなバケットに均一に分布する値に基づいています。値が割り当てられるバケットは、ハッシュ関数と呼ばれる関数によって決定されます。インデックス作成には主に 3 つの方法があります。

  • クラスター化インデックス作成 : 3 つ以上のレコードが同じファイルに保存される場合、このタイプの保存はクラスター インデックス作成として知られています。クラスターインデックスを使用すると、同じものに関連する複数のレコードが 1 か所に保存されるため、検索コストを削減でき、また、3 つ以上のテーブル (レコード) を頻繁に結合できるようになります。
    クラスタリング インデックスは、順序付けされたデータ ファイルで定義されます。データ ファイルは非キー フィールドで順序付けされます。場合によっては、レコードごとに一意ではない可能性のある非主キー列にインデックスが作成されることがあります。このような場合、レコードをより速く識別するために、2 つ以上の列をグループ化して一意の値を取得し、それらの値からインデックスを作成します。この方法はクラスタリングインデックスとして知られています。基本的に、同様のプロパティを持つレコードがグループ化され、これらのグループのインデックスが形成されます。
    たとえば、学期ごとに勉強する学生はグループに分けられます。 1学期生、2学期生、3学期生などに分かれています。

クラスター化インデックス作成

  • プライマリインデックス作成: これはクラスター化インデックスの一種で、データが検索キーに従って並べ替えられ、データベース テーブルの主キーがインデックスの作成に使用されます。これはインデックス作成のデフォルトの形式であり、 シーケンシャルファイル構成 。主キーは一意であり、ソートされた方法で保存されるため、検索操作のパフォーマンスは非常に効率的です。
  • 非クラスター化インデックスまたはセカンダリインデックス作成 : 非クラスター化インデックスは、データがどこにあるかを示すだけです。つまり、データが実際に保存されている場所への仮想ポインターまたは参照のリストを提供します。データは物理的にインデックスの順序で保存されるわけではありません。代わりに、データはリーフ ノードに存在します。たとえば。本の目次ページ。各エントリから、ページ番号または保存されている情報の場所がわかります。ここにある実際のデータ (本の各ページの情報) は整理されていませんが、データ ポイントが実際に存在する場所への順序付けされた参照 (目次ページ) があります。データがそれに応じて物理的に編成されていないため、疎な順序付けは不可能であるため、非クラスター化インデックスでは密な順序付けのみが可能です。
    ポインターをさらにたどってデータを抽出するためにある程度の追加作業が行われるため、クラスター化インデックスと比較して時間がかかります。クラスター化インデックスの場合、データはインデックスの直前に存在します。
非クラスター化インデックス作成

非クラスター化インデックス作成

  • マルチレベルのインデックス作成: データベースのサイズが大きくなるにつれて、インデックスも大きくなります。インデックスはメイン メモリに保存されるため、単一レベルのインデックスのサイズが大きすぎて、複数のディスク アクセスで保存できない場合があります。マルチレベルのインデックス付けでは、メイン ブロックをさまざまな小さなブロックに分離して、同じものを 1 つのブロックに格納できます。外側のブロックは内側のブロックに分割され、内側のブロックはデータ ブロックを指します。これは、オーバーヘッドを少なくしてメイン メモリに簡単に保存できます。

マルチレベルのインデックス作成

インデックス作成の利点

  • クエリのパフォーマンスの向上: インデックスを作成すると、データベースからのデータの取得を高速化できます。データベースは、列にインデックスを生成することで、特定の値または値のコレクションに一致する行を迅速に検出し、クエリの実行にかかる時間を最小限に抑えることができます。
  • 効率的なデータアクセス: インデックスを作成すると、データの取得に必要なディスク I/O の量が減り、データ アクセスの効率が向上します。データベースは、頻繁にアクセスされる列のデータ ページをメモリ内で維持できるように、これらの列にインデックスを生成することで、ディスクから読み取る必要性を減らします。
  • 最適化されたデータの並べ替え: インデックスを作成すると、並べ替え操作のパフォーマンスも向上します。ソートに使用される列にインデックスを作成すると、データベースはテーブル全体のソートを回避し、代わりに関連する行のみをソートできます。
  • 一貫したデータパフォーマンス: インデックス作成は、データベース内のデータ量が増加した場合でも、データベースが一貫して実行されるようにするのに役立ちます。インデックスを作成しないと、テーブル内の行数が増加するにつれてクエリの実行に時間がかかる可能性がありますが、インデックスを作成するとほぼ一定の速度が維持されます。
  • 一意としてインデックス付けされた列には一意の値のみが挿入されるようにすることで、インデックス付けを利用してデータの整合性を確保することもできます。これにより、クエリやレポートの実行時に問題が発生する可能性がある重複データのデータベースへの保存が回避されます。

全体として、データベースのインデックス作成は、クエリのパフォーマンスの向上、効率的なデータ アクセス、最適化されたデータの並べ替え、一貫したデータ パフォーマンス、および強制的なデータ整合性において大きなメリットをもたらします。

インデックス作成の欠点

  • インデックス作成には、インデックス データ構造を保持するためのより多くの記憶領域が必要となり、データベースの合計サイズが増加する可能性があります。
  • データベース保守のオーバーヘッドの増加: テーブル内でデータが追加、破棄、または変更されるたびにインデックスを維持する必要があるため、データベース メンテナンスのオーバーヘッドが増加する可能性があります。
  • データが変更されるたびにインデックス データ構造を更新する必要があるため、インデックスを作成すると、挿入および更新のパフォーマンスが低下する可能性があります。
  • インデックスの選択は難しい場合があります。 特定のクエリやアプリケーションに適切なインデックスを選択するのは難しい場合があり、データとアクセス パターンの詳細な検査が必要になる場合があります。

インデックス作成の特徴

  • 次のようなデータ構造の開発 B ツリー または 列のインデックス付けにとって最も重要な列は、その列が使用される頻度と、それらが受けるクエリの種類に基づいて選択されます。の カーディナリティ 、選択性、およびインデックス付け列の一意性を考慮できます。
  • データベースでは、プライマリ インデックス、セカンダリ インデックス、クラスタ化インデックス、非クラスタ化インデックスなど、いくつかの異なるインデックス タイプが使用されます。データベース システムの特定のニーズに基づいて、インデックスの各形式には利点と欠点があります。
  • データベース システムが最高の状態で機能するには、定期的なインデックスのメンテナンスが必要です。データの変化や利用形態に応じて、インデックスの構築、更新、削除などの保守作業が行われます。
  • データベース クエリの最適化にはインデックス作成が含まれますが、これは不可欠です。クエリ オプティマイザーはインデックスを利用して、データへのアクセスのコストとインデックス列の選択性に基づいて、特定のクエリに最適な実行戦略を選択します。
  • データベースでは、カバーインデックス、インデックスのみのスキャン、部分インデックスなど、さまざまなインデックス作成戦略が使用されます。これらの技術は、特定の種類のクエリおよびデータ アクセスに対するインデックスの利用を最大化します。
  • 連続していないデータ ブロックがインデックスに格納されると、インデックスの断片化が発生し、インデックスの効率が低下する可能性があります。デフラグや再編成などの定期的なインデックスのメンテナンスが減少する可能性があります。 断片化

結論

インデックス作成は、検索時間を最適化するのに役立つ非常に便利な手法です。 データベース クエリ。データベースインデックスのテーブルは検索キーと ポインタ 。インデックス作成には、プライマリ、セカンダリ クラスタリング、および多値インデックスの 4 種類があります。プライマリ インデックス作成は、密と疎の 2 つのタイプに分類されます。高密度インデックスは、インデックス テーブルにすべての検索キーのレコードが含まれている場合に使用されます。スパース インデックスは、インデックス テーブルがすべてのレコードに検索キーを使用しない場合に使用されます。マルチレベルインデックスの使用 B+ ツリー 。インデックス作成の主な目的は、データ取得のパフォーマンスを向上させることです。

インデックス作成に関するよくある質問

Q.1: データベースのインデックス作成とは何ですか?

答え:

インデックス作成は基本的に、データベース クエリの検索時間を短縮したり、データベースへのアクセスを高速化するのに役立つ技術です。

Q.2: インデックスデータベースの例は何ですか?

答え:

インデックスデータベースの一般的な例としては、Web of Science、DOAJ (Directory of Open Access Journals) などがあります。

詳細については、以下を参照してください。 B+ ツリーの紹介 そして データベース内のキーの種類 記事。