SQLite インデックス
インデックスは、データ検索を高速化するためにデータベース検索エンジンによって使用される特別な検索テーブルです。簡単に言えば、インデックスはテーブル内のデータへのポインターです。データベースの索引は、書籍の索引と非常によく似ています。
たとえば、特定のトピックについて説明している本のすべてのページを引用したい場合は、最初にすべてのトピックをアルファベット順にリストした索引をポイントし、次に 1 つ以上の特定のページ番号をポイントします。
インデックスは SELECT クエリと WHERE 句の高速化に役立ちますが、UPDATE ステートメントと INSERT ステートメントを使用する場合はデータ入力が遅くなります。インデックスは、データに影響を与えることなく作成または削除できます。
CREATE INDEX ステートメントを使用してインデックスを作成します。これにより、インデックスに名前を付け、テーブルとインデックスを作成する列を指定し、インデックスが昇順か降順かを指定できます。
インデックスは、UNIQUE 制約と同様に一意にすることもでき、列または列の組み合わせでの重複エントリを防ぎます。
CREATE INDEX コマンド
CREATE INDEX の基本構文は次のとおりです:
単一列インデックス
単一列インデックスは、以下に基づいて作成されたインデックスです。テーブルの 1 つの列のみ。基本的な構文は次のとおりです:
ON table_name (column_name);
一意のインデックス
一意のインデックスを使用することは、パフォーマンスのためだけでなく、データの整合性のためにも役立ちます。一意のインデックスでは、テーブルに重複した値を挿入することはできません。基本的な構文は次のとおりです:
on table_name (column_name);
複合インデックス
複合インデックスは、テーブルの 2 つ以上の列に基づいて作成されるインデックスです。基本的な構文は次のとおりです。
on table_name (column1, column2);
単一列インデックスを作成するか結合インデックスを作成するかに関係なく、それを非常によく使用することを考慮する必要があります。多くの場合、WHERE 句でクエリ フィルター条件リストとして使用されます。
値に列が使用されている場合は、単一列インデックスの使用を選択します。 WHERE 句でフィルターとして 2 つ以上の列が頻繁に使用される場合は、複合インデックスの使用を選択します。
暗黙的インデックス
暗黙的インデックスは、オブジェクトの作成時にデータベースサーバーによって自動的に作成されるインデックスです。インデックスは主キー制約と一意制約を使用して自動的に作成されます。
例
COMPANY テーブルの給与列にインデックスを作成する例を次に示します:
次に、.indices を使用しましょう。 コマンド 次のように COMPANY テーブルで使用可能なすべてのインデックスをリストします。
これにより、次の結果が生成されます。ここで、 sqlite_autoindex_COMPANY_1 は、テーブルの作成時に作成された暗黙的なインデックスです。
sqlite_autoindex_COMPANY_1
次のようにデータベーススコープ内のすべてのインデックスをリストできます:
DROP INDEX
インデックスは使用できますSQLite の DROP コマンドを削除します。インデックスを削除する場合は、パフォーマンスが低下または向上する可能性があるため、特別な注意が必要です。
基本的な構文は次のとおりです:
次のステートメントを使用して、以前に作成したインデックスを削除できます:
どのような状況で避けるべきかインデックスを使用しますか?
インデックスの目的はデータベースのパフォーマンスを向上させることですが、インデックスの使用を避けなければならない状況がいくつかあります。インデックスを使用する場合は、次のガイドラインを再検討する必要があります:
インデックスは、小さなテーブルでは使用しないでください。
大規模なバッチ更新または挿入操作が頻繁に行われるテーブルではインデックスを使用しないでください。
インデックスは、多数の NULL 値を含む列では使用しないでください。
頻繁に操作される列にはインデックスを使用しないでください。