クラスター化インデックスと非クラスター化インデックスの違いは何ですか?
SQL のインデックスは、データベースがテーブル内のすべての行をスキャンすることなくデータを迅速に検索できるようにすることで、データベース クエリのパフォーマンスを向上させるために使用されます。クラスター化インデックスと非クラスター化インデックスは 2 つの主要なタイプであり、構造と目的が大きく異なります。
クラスター化インデックス
定義:
クラスター化インデックスは、テーブル内のデータの物理的な順序を決定します。テーブルの行はインデックスと同じ順序で保存されます。
-
特徴:
-
テーブルごとに 1 つ: 行は 1 つの順序でのみ格納できるため、テーブルには 1 つのクラスター化インデックスのみを含めることができます。
-
デフォルトの主キー: 主キーが定義されると、通常、クラスター化インデックスが自動的に作成されます。
-
データストレージ: データとインデックスは一緒に保存されます。
-
利点:
- 値の範囲 (BETWEEN、ORDER BY など) を返すクエリを高速化します。
- 並べ替えや範囲スキャンを伴うクエリに効率的です。
- 大規模なデータセットを返す操作の方が高速です。
-
欠点:
- 行の並べ替えにより、挿入、更新、および削除操作のパフォーマンスが低下します。
- 頻繁に書き込みを行うテーブルには最適ではありません。
例:
CREATE CLUSTERED INDEX idx_employee_id
ON Employees(EmployeeID);
ログイン後にコピー
ログイン後にコピー
この場合、EmployeeID 列によって、Employees テーブル内の行の物理的な順序が決まります。
非クラスター化インデックス
定義:
非クラスター化インデックスは、データの物理的な場所へのポインターを含む、テーブル データとは別の構造を作成します。
-
特徴:
-
テーブルごとに複数: テーブルには複数の非クラスター化インデックスを含めることができます。
-
物理的な順序に依存しない: テーブル内の行の物理的な順序には影響しません。
-
インデックス構造: キー値と実際のデータ行へのポインターが含まれます。
-
利点:
- クラスター化インデックス以外の列に基づいてフィルターまたは並べ替えを行うクエリに役立ちます。
- テーブルの物理的な順序に影響を与えることなく、特定のクエリのパフォーマンスを向上させます。
-
欠点:
- クラスター化インデックスと比較して、広範囲のスキャンの速度が遅くなります。
- インデックス構造用に追加の記憶領域が必要になります。
例:
CREATE CLUSTERED INDEX idx_employee_id
ON Employees(EmployeeID);
ログイン後にコピー
ログイン後にコピー
これにより、行の物理的な順序を変更せずに、LastName 列にインデックスが作成されます。
比較表
機能 |
クラスター化インデックス |
非クラスター化インデックス |
Feature |
Clustered Index |
Non-Clustered Index |
Physical Order |
Matches index order |
Independent of index order |
Data Storage |
Data and index are stored together |
Data and index are stored separately |
Quantity Per Table |
One per table |
Multiple allowed |
Use Case |
Range queries, sorting |
Filtering or searching by specific values |
Performance |
Faster for range scans |
Faster for point queries |
Impact on Writes |
Higher impact |
Lower impact |
物理的順序 |
インデックスの順序と一致します |
インデックスの順序に依存しない |
データストレージ
|
データとインデックスは一緒に保存されます |
データとインデックスは別々に保存されます |
テーブルごとの数量 |
テーブルごとに 1 つ |
複数可 |
使用例
|
範囲クエリ、並べ替え |
特定の値によるフィルタリングまたは検索 |
パフォーマンス
|
範囲スキャンの高速化 |
ポイントクエリの高速化 |
書き込みへの影響 |
より大きな影響 |
影響が少ない |
いつどちらを使用するべきですか?
クラスター化インデックス
: 値の範囲に対して頻繁にクエリが実行されるテーブル、または並べ替えが必要なテーブルに最適です。主キーによく使用されます。
非クラスター化インデックス: 特にテーブルに既にクラスター化インデックスがある場合、WHERE、JOIN、またはフィルター操作で頻繁に使用される列に最適です。
結論
クラスター化インデックスと非クラスター化インデックスは、データベースのパフォーマンスを最適化する際に異なる目的を果たします。クラスター化インデックスはテーブル ストレージ内でデータを物理的に編成しますが、非クラスター化インデックスは、物理的な順序に影響を与えることなくデータにアクセスする柔軟な方法を提供します。どちらを選択するかは、データベースとクエリの特定の要件によって異なります。
こんにちは、アバイ・シン・カタヤットです!
私はフロントエンドとバックエンドの両方のテクノロジーの専門知識を持つフルスタック開発者です。私はさまざまなプログラミング言語やフレームワークを使用して、効率的でスケーラブルでユーザーフレンドリーなアプリケーションを構築しています。
ビジネス用メールアドレス kaashshorts28@gmail.com までお気軽にご連絡ください。
以上がクラスター化インデックスと非クラスター化インデックス: データベース最適化における主な違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。