Sql-indexes

提供:Dev Guides
移動先:案内検索

SQL-インデックス

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

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

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

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

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

CREATE INDEXコマンド

*CREATE INDEX* の基本的な構文は次のとおりです。
CREATE INDEX index_name ON table_name;

単一列インデックス

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

CREATE INDEX index_name
ON table_name (column_name);

一意のインデックス

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

CREATE UNIQUE INDEX index_name
on table_name (column_name);

複合インデックス

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

CREATE INDEX index_name
on table_name (column1, column2);

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

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

暗黙的なインデックス

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

DROP INDEXコマンド

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

基本的な構文は次のとおりです-

DROP INDEX index_name;

link:/sql/sql-index [INDEX Constraint]の章をチェックして、インデックスの実際の例を確認できます。

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

インデックスはデータベースのパフォーマンスを向上させることを目的としていますが、回避する必要がある場合があります。

次のガイドラインは、インデックスの使用をいつ再検討する必要があるかを示しています。

  • 小さいテーブルではインデックスを使用しないでください。
  • 頻繁に大規模なバッチ更新または挿入操作が行われるテーブル。
  • 多数のNULL値を含む列にはインデックスを使用しないでください。
  • 頻繁に操作される列にはインデックスを付けないでください。