ホームページ > データベース > mysql チュートリアル > クラスター化インデックスと非クラスター化インデックス: データベース最適化における主な違い

クラスター化インデックスと非クラスター化インデックス: データベース最適化における主な違い

Susan Sarandon
リリース: 2024-12-30 21:08:10
オリジナル
936 人が閲覧しました

Clustered vs Non-Clustered Indexes: Key Differences for Database Optimization

クラスター化インデックスと非クラスター化インデックスの違いは何ですか?

SQL のインデックスは、データベースがテーブル内のすべての行をスキャンすることなくデータを迅速に検索できるようにすることで、データベース クエリのパフォーマンスを向上させるために使用されます。クラスター化インデックスと非クラスター化インデックスは 2 つの主要なタイプであり、構造と目的が大きく異なります。


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

  1. 定義:

    クラスター化インデックスは、テーブル内のデータの物理的な順序を決定します。テーブルの行はインデックスと同じ順序で保存されます。

  2. 特徴:

    • テーブルごとに 1 つ: 行は 1 つの順序でのみ格納できるため、テーブルには 1 つのクラスター化インデックスのみを含めることができます。
    • デフォルトの主キー: 主キーが定義されると、通常、クラスター化インデックスが自動的に作成されます。
    • データストレージ: データとインデックスは一緒に保存されます。
  3. 利点:

    • 値の範囲 (BETWEEN、ORDER BY など) を返すクエリを高速化します。
    • 並べ替えや範囲スキャンを伴うクエリに効率的です。
    • 大規模なデータセットを返す操作の方が高速です。
  4. 欠点:

    • 行の並べ替えにより、挿入、更新、および削除操作のパフォーマンスが低下します。
    • 頻繁に書き込みを行うテーブルには最適ではありません。
  5. :

   CREATE CLUSTERED INDEX idx_employee_id
   ON Employees(EmployeeID);
ログイン後にコピー
ログイン後にコピー

この場合、EmployeeID 列によって、Employees テーブル内の行の物理的な順序が決まります。


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

  1. 定義:

    非クラスター化インデックスは、データの物理的な場所へのポインターを含む、テーブル データとは別の構造を作成します。

  2. 特徴:

    • テーブルごとに複数: テーブルには複数の非クラスター化インデックスを含めることができます。
    • 物理的な順序に依存しない: テーブル内の行の物理的な順序には影響しません。
    • インデックス構造: キー値と実際のデータ行へのポインターが含まれます。
  3. 利点:

    • クラスター化インデックス以外の列に基づいてフィルターまたは並べ替えを行うクエリに役立ちます。
    • テーブルの物理的な順序に影響を与えることなく、特定のクエリのパフォーマンスを向上させます。
  4. 欠点:

    • クラスター化インデックスと比較して、広範囲のスキャンの速度が遅くなります。
    • インデックス構造用に追加の記憶領域が必要になります。
  5. :

   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 サイトの他の関連記事を参照してください。

    ソース:dev.to
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    著者別の最新記事
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート