- インデックス作成は、クエリの処理時に必要なディスク アクセスの数を最小限に抑え、データベースのパフォーマンスを最適化するために使用されます。
- インデックスはデータ構造の一種です。これは、データベース テーブル内のデータをすばやく見つけてアクセスするために使用されます。
インデックス構造:
一部のデータベース列を使用してインデックスを作成できます。
- データベースの最初の列は、テーブルの主キーまたは候補キーのコピーを含む検索キーです。主キーの値は、対応するデータに簡単にアクセスできるように、ソートされた順序で保存されます。
- データベースの 2 番目の列はデータ参照です。これには、特定のキーの値が見つかるディスク ブロックのアドレスを保持するポインターのセットが含まれています。
インデックス作成方法
順序付きインデックス
通常、インデックスは検索を高速化するために並べ替えられています。ソートされたインデックスは、順序付けされたインデックスと呼ばれます。
例 : 従業員テーブルに数千のレコードがあり、それぞれの長さが 10 バイトであるとします。 ID が 1、2、3... などで始まる場合、ID-543 で学生を検索する必要があります。
- インデックスのないデータベースの場合、ディスク ブロックを開始してから 543 に達するまで検索する必要があります。DBMS は、543*10=5430 バイトを読み取った後でレコードを読み取ります。
- インデックスの場合、インデックスを使用して検索し、DBMS は 542*2= 1084 バイトを読み取った後でレコードを読み取りますが、これは前の場合と比べて非常に少なくなります。
プライマリインデックス
- テーブルの主キーに基づいてインデックスが作成される場合、それは主インデックス作成と呼ばれます。これらの主キーは各レコードに一意であり、レコード間に 1:1 の関係が含まれます。
- 主キーはソートされた順序で保存されるため、検索操作のパフォーマンスは非常に効率的です。
- プライマリ インデックスは、Dense インデックスと Sparse インデックスの 2 種類に分類できます。
密なインデックス
- 密なインデックスには、データ ファイル内のすべての検索キー値のインデックス レコードが含まれます。検索が速くなります。
- この場合、インデックス テーブルのレコード数はメイン テーブルのレコード数と同じになります。
- インデックス レコード自体を保存するには、より多くのスペースが必要です。インデックス レコードには、検索キーと、ディスク上の実際のレコードへのポインタが含まれます。
スパースインデックス
- データ ファイルでは、インデックス レコードは少数の項目に対してのみ表示されます。各項目はブロックを指します。
- この場合、インデックスはメイン テーブルの各レコードを指すのではなく、ギャップ内のメイン テーブルのレコードを指します。
クラスタリングインデックス
- クラスター化インデックスは、順序付けされたデータ ファイルとして定義できます。場合によっては、レコードごとに一意ではない可能性のある非主キー列にインデックスが作成されることがあります。
- この場合、レコードをより速く識別するために、2 つ以上の列をグループ化して一意の値を取得し、それらからインデックスを作成します。この方法をクラスタリングインデックスと呼びます。
- 類似した特性を持つレコードがグループ化され、これらのグループに対してインデックスが作成されます。
例 : 会社の各部門に複数の従業員がいるとします。クラスタリング インデックスを使用するとします。このインデックスでは、同じ Dept_ID に属するすべての従業員が単一のクラスタ内にあるとみなされ、インデックス ポインタがクラスタ全体を指します。ここで、Dept_Id は非一意のキーです。
前のスキーマは、1 つのディスク ブロックが異なるクラスターに属するレコードによって共有されるため、少し混乱します。別々のクラスターに別々のディスク ブロックを使用する場合、それはより優れた技術と呼ばれます。
セカンダリインデックス
スパースインデックスでは、テーブルのサイズが大きくなるにつれて、マッピングのサイズも大きくなります。通常、これらのマッピングはプライマリ メモリに保存されるため、アドレスのフェッチが高速になります。次に、二次メモリはマッピングから取得したアドレスに基づいて実際のデータを検索します。マッピング サイズが大きくなると、アドレスの取得自体が遅くなります。この場合、スパースインデックスは効率的ではありません。この問題を解決するために、セカンダリ インデックスが導入されました。
セカンダリ インデックス作成では、マッピングのサイズを削減するために、別のレベルのインデックス作成が導入されます。この方法では、最初に列の巨大な範囲が選択されるため、第 1 レベルのマッピング サイズは小さくなります。次に、各範囲がさらに小さな範囲に分割されます。第 1 レベルのマッピングはプライマリ メモリに保存されるため、アドレスのフェッチが高速になります。第 2 レベルのマッピングと実際のデータは 2 次メモリ (ハードディスク) に保存されます。
例えば:
- 図のロール 111 のレコードを検索する場合は、第 1 レベルのインデックスで 111 以下の最上位のエントリが検索されます。このレベルでは100点が取れます。
- 次に、2 番目のインデックス レベルでは、再び最大 (111) になります。<= 111 and gets 110. now using the address 110, it goes to data block starts searching each record till 111. < li>
- このメソッドではこのようにして検索が実行されます。挿入、更新、削除も同様に行います。 =>