T-SQL-インデックス

Indexesデータベース検索エンジンがデータ取得を高速化するために使用できる特別なルックアップテーブルです。簡単に言えば、indexテーブル内のデータへのポインタです。データベース内のインデックスは、本の最後にあるインデックスと非常によく似ています。

たとえば、特定のトピックについて説明している本のすべてのページを参照する場合は、最初にインデックスを参照します。インデックスには、すべてのトピックがアルファベット順にリストされてから、1つ以上の特定のページ番号が参照されます。

インデックスは、SELECTクエリとWHERE句を高速化するのに役立ちますが、UPDATEステートメントとINSERTステートメントを使用すると、データ入力が遅くなります。インデックスは、データに影響を与えることなく作成または削除できます。

インデックスの作成には、CREATE INDEXステートメントが含まれます。これにより、インデックスに名前を付けたり、テーブルとインデックスを作成する列を指定したり、インデックスが昇順か降順かを指定したりできます。

インデックスは、UNIQUE制約と同様に一意にすることもできます。この点で、インデックスは、インデックスが存在する列または列の組み合わせでのエントリの重複を防ぎます。

CREATEINDEXコマンド

以下は、CREATEINDEXの基本的な構文です。

構文

CREATE INDEX index_name ON table_name

単一列インデックス

単一列インデックスは、1つのテーブル列のみに基づいて作成されるインデックスです。以下は基本的な構文です。

構文

CREATE INDEX index_name 
ON table_name (column_name)

CREATE INDEX singlecolumnindex 
ON customers (ID)

一意のインデックス

一意のインデックスは、パフォーマンスだけでなく、データの整合性にも使用されます。一意のインデックスでは、重複する値をテーブルに挿入することはできません。以下は基本的な構文です。

構文

CREATE UNIQUE INDEX index_name 
on table_name (column_name)

CREATE UNIQUE INDEX uniqueindex 
on customers (NAME)

複合インデックス

複合インデックスは、テーブルの2つ以上の列のインデックスです。以下は基本的な構文です。

構文

CREATE INDEX index_name on table_name (column1, column2)

CREATE INDEX compositeindex 
on customers (NAME, ID)

単一列インデックスを作成するか複合インデックスを作成するかにかかわらず、クエリのWHERE句でフィルタ条件として非常に頻繁に使用する可能性のある列を考慮してください。

使用する列が1つだけの場合は、単一列のインデックスを選択する必要があります。WHERE句でフィルタとして頻繁に使用される列が2つ以上ある場合は、複合インデックスが最適です。

暗黙のインデックス

暗黙インデックスは、オブジェクトの作成時にデータベースサーバーによって自動的に作成されるインデックスです。主キー制約と一意の制約のインデックスが自動的に作成されます。

DROPINDEXコマンド

インデックスは、MS SQL SERVERDROPコマンドを使用して削除できます。パフォーマンスが低下または改善される可能性があるため、インデックスを削除するときは注意が必要です。

構文

以下は基本的な構文です。

DROP INDEX tablename.index_name

いつインデックスを避けるべきですか?

インデックスはデータベースのパフォーマンスを向上させることを目的としていますが、回避する必要がある場合があります。次のガイドラインは、インデックスの使用をいつ再検討する必要があるかを示しています。

  • 小さなテーブルではインデックスを使用しないでください。

  • 頻繁に大規模なバッチ更新または挿入操作が行われるテーブルには、インデックスを付けないでください。

  • 多数のNULL値を含む列にインデックスを使用しないでください。

  • 頻繁に操作される列にはインデックスを付けないでください。