インデックスとは何ですか?
インデックスは、データベース内の1つ以上の列から構築されたキーであり、テーブルまたはビューからの行のフェッチを高速化します。このキーは、Oracle、SQL Server、MySQLなどのデータベースがキー値に関連付けられた行をすばやく見つけるのに役立ちます。
2種類のインデックスは次のとおりです。
- クラスター化インデックス
- 非クラスター化インデックス
このチュートリアルでは、学習します:
- インデックスとは何ですか?
- クラスター化インデックスとは何ですか?
- 非クラスター化インデックスとは何ですか?
- クラスター化インデックスの特性
- 非クラスター化インデックスの特性
- クラスター化インデックスの例
- 非クラスター化インデックスの例クラスター化インデックス
- クラスター化インデックスと非クラスター化インデックスの違い
- クラスター化インデックスの長所
- 非クラスター化インデックスの長所
- クラスター化の短所インデックス
- 非クラスター化インデックスのデメリット
クラスター化インデックスとは
クラスターインデックスは、データ行を並べ替えるインデックスの一種です。それらのキー値の表にあります。データベースでは、テーブルごとに1つのクラスター化インデックスのみがあります。
クラスター化インデックスは、1つの方法でのみ並べ替えることができるデータがテーブルに格納される順序を定義します。したがって、すべてのテーブルに1つのクラスター化インデックスしか存在できません。 RDBMSでは、通常、主キーを使用すると、その特定の列に基づいてクラスター化インデックスを作成できます。
非クラスター化インデックスとは何ですか?
非クラスター化インデックスは、ある場所にデータを格納し、別の場所にインデックスを格納します。インデックスには、そのデータの場所へのポインタが含まれています。非クラスター化インデックスのインデックスはさまざまな場所に格納されるため、1つのテーブルに多くの非クラスター化インデックスを含めることができます。
たとえば、本には複数の索引を付けることができます。最初に1つは本の内容を単位ごとに表示し、2番目の索引は用語の索引をアルファベット順に表示します。
非クラスタリングインデックスは、テーブルの非順序付けフィールドで定義されます。このタイプのインデックス作成方法は、主キーとして割り当てられていないキーを使用するクエリのパフォーマンスを向上させるのに役立ちます。非クラスター化インデックスを使用すると、テーブルに一意のキーを追加できます。
キーの違い
- クラスターインデックスは、テーブル内のデータ行をキー値で並べ替えるインデックスの一種ですが、非クラスターインデックスはデータを格納しますある場所でインデックスを作成し、別の場所でインデックスを作成します。
- クラスター化インデックスはデータページをインデックスのリーフノードに格納しますが、非クラスター化インデックス方式はデータページをインデックスのリーフノードに格納しません。
- クラスターインデックスは必要ありません追加のディスクスペースが必要ですが、非クラスター化インデックスには追加のディスクスペースが必要です。
- クラスターインデックスはデータアクセスを高速化しますが、非クラスター化インデックスは低速です。
クラスター化インデックスの特性
- デフォルトの並べ替えられたデータストレージ
- インデックスに1つまたは複数の列を使用する
- ヘルプデータとインデックスを一緒に保存します
- フラグメンテーション
- 操作
- クラスター化インデックススキャンとインデックスシーク
- キールックアップ
非クラスター化インデックスの特性
- キー値のみを格納する
- ヒープ/クラスター化インデックス行へのポインター
- セカンダリデータを許可するアクセス
- データへのブリッジ
- インデックススキャンとインデックスシークの操作
- テーブルまたはビューのクラスター化インデックス
- 非クラスター化インデックスのすべてのインデックス行には、非クラスター化キー値と行ロケーターが格納されます
クラスター化インデックスの例
以下の例では、SalesOrderDetailIDはクラスター化インデックスです。データを取得するためのサンプルクエリ
SELECT CarrierTrackingNumber, UnitPriceFROM SalesDataWHERE SalesOrderDetailID = 6
非クラスター化インデックスの例
以下の例では、次のようにOrderQtyとProductIDに非クラスター化インデックスが作成されます
CREATE INDEX myIndex ONSalesData (ProductID, OrderQty)
次のクエリは、クラスター化インデックスと比較して高速に取得されます。
SELECT Product ID, OrderQtyFROM SalesDataWHERE ProductID = 714
クラスター化されたものの違いインデックスと非クラスター化インデックス
パラメーター | クラスター化 | 非クラスター化 |
---|---|---|
用途 | レコードを並べ替えて、クラスター化されたインデックスを順序に従って物理的にメモリに保存できます。 | 非クラスター化インデックスは、データ行の論理的な順序を作成し、物理データファイルのポインターを使用するのに役立ちます。 |
保存方法 | インデックスのリーフノードにデータページを保存できます。 | このインデックス作成方法では、データページがインデックスのリーフノードに保存されることはありません。 |
サイズ | クラスター化インデックスのサイズは非常に大きいです。 | 非クラスター化インデックスのサイズは、クラスター化インデックスに比べて小さいです。 |
データアクセス | 高速 | クラスター化インデックスと比較して低速 |
追加のディスク容量 | 不要 | インデックスを個別に保存する必要があります |
キーのタイプ | デフォルトでは、テーブルの主キーはクラスター化インデックスです。 | 複合キーとして機能するテーブルの一意性制約を使用して使用できます。 |
主な機能 | クラスター化インデックスを使用すると、データ取得のパフォーマンスを向上させることができます。 | 結合で使用される列に作成する必要があります。 |
クラスター化インデックスの利点
クラスター化インデックスの長所/利点は次のとおりです。
- クラスター化インデックスは、最大、最小、カウントタイプのクエリを使用した範囲またはグループ化に理想的なオプションです
- このタイプのインデックスでは、データ内の特定のポイントに直接検索できるため、そこから順番に読み続けることができます。
- クラスター化インデックス方式では、ロケーションメカニズムを使用して、範囲の先頭にあるインデックスエントリを検索します。
- これは、検索キー値の範囲が要求された場合の範囲検索に効果的な方法です。
- ページ転送を最小限に抑え、キャッシュヒットを最大化するのに役立ちます。
非クラスター化インデックスの利点
非クラスター化インデックスを使用する利点は次のとおりです。
- 非クラスター化インデックスは次のことに役立ちます。データベーステーブルからデータをすばやく取得します。
- クラスター化インデックスに関連するオーバーヘッドコストを回避するのに役立ちます
- テーブルには、RDBMSに複数の非クラスター化インデックスが含まれる場合があります。したがって、複数のインデックスを作成するために使用できます。
クラスター化インデックスのデメリット
クラスター化インデックスを使用する場合の短所/欠点は次のとおりです。
- 非シーケンシャルでの挿入が多い順序
- クラスター化インデックスは、データページとインデックスページを含む多くの一定のページ分割を作成します。
- 挿入、更新、削除のためのSQLの追加作業。
- クラスター化インデックスのフィールドが変更されると、クラスター化インデックスのレコードの更新に時間がかかります。
- リーフノードには、ほとんどの場合、クラスター化インデックスのデータページが含まれます。
非クラスター化インデックスのデメリット
ここに、非クラスター化インデックスを使用することの短所/欠点があります。