sql >> データベース >  >> RDS >> Sqlserver

インデックス キー列 VS インデックスに含まれる列

    インデックス キー列は、インデックスの B ツリーの一部です。列は含まれていません。

    2 つのインデックスを取る:

    CREATE INDEX index1 ON table1 (col1, col2, col3)
    CREATE INDEX index2 ON table1 (col1) INCLUDE (col2, col3)
    

    index1 この種のクエリに適しています:

    SELECT * FROM table1 WHERE col1 = x AND col2 = y AND col3 = z
    

    一方、index2 この種のクエリに適しています:

    SELECT col2, col3 FROM table1 WHERE col1 = x
    

    最初のクエリでは、index1 対象の行をすばやく識別するメカニズムを提供します。クエリは (おそらく) インデックス シークとして実行され、その後、行全体を取得するためのブックマーク ルックアップが続きます。

    2 番目のクエリでは、index2 カバーインデックスとして機能します。インデックスは、クエリを満たすために必要なすべてのデータを提供するため、SQL Server はベース テーブルにヒットする必要はまったくありません。 index1 この場合、カバーインデックスとしても機能します。

    カバリング インデックスが必要だが、すべての列をシークしないため、または許可されたデータ型 (XML など) ではないために追加できないため、すべての列を B ツリーに追加したくない場合は、 INCLUDE 句。



    1. 自己管理型PostgreSQLパーティションテーブル

    2. PHPで動作するようにメールサーバーを構成する

    3. Djangoの移行:テーブルを作成しません

    4. 2つの大きなデータベーステーブルを比較する