English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SQLite インデックス

インデックスは特別な検索テーブルであり、データベースの検索エンジンがインデックスを使用してデータの検索を加速できます。簡単に言えば、anインデックスインデックスはテーブルのデータを指すポインタです。データベースのインデックスは、本の末尾のインデックスと非常に似ています。

例えば、あるトピックに関するすべてのページを参照する必要がある場合、まず索引を参照し、すべてのトピックをアルファベット順にリストした索引を参照し、特定のページ番号を引用します。

インデックスはSELECTクエリやWHERE子句の速度を向上させますが、UPDATEやINSERT文でデータの入力速度を遅らせます。インデックスを追加または削除することでデータに影響を与えることはありません。

インデックスの作成はCREATE INDEX文で行われ、インデックスに名前を付け、テーブルとインデックスする列を指定し、インデックスが昇順か降順かを指示します。

インデックスはユニークなものでもあり、UNIQUE制約に似ています。なぜなら、インデックスは重複のエントリを防ぐために、インデックスの列や列の組み合わせに存在します。

CREATE INDEXコマンド

以下は基本的な構文ですCREATE INDEX

CREATE INDEX index_name ON table_name;

単列インデックス

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

CREATE INDEX index_name ON table_name (column_name);

唯一インデックス

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

CREATE UNIQUE INDEX index_name ON table_name (column_name);

複合インデックス

複合インデックスは、テーブルの二つ以上の列上に作成されるインデックスです。基本的な構文は以下の通りです-

CREATE INDEX index_name ON table_name (column1, column2);

単列インデックスまたは複合インデックスを作成する場合でも、WHERE子句で非常に頻繁に使用される可能性のあるcolumn(s)を考慮してください。

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

暗黙的なインデックス

暗黙的なインデックスは、オブジェクトを作成する際にデータベースサーバーが自動的に作成するインデックスです。自動的に主キー制約とユニーク制約にインデックスを作成します。

以下は例です。COMPANYテーブルの給料列にインデックスを作成します。-

sqlite> CREATE INDEX salary_index ON COMPANY (salary);

今、以下を使用して.indicesコマンドはCOMPANYテーブルにすべての利用可能なインデックスをリストします:

sqlite> .indices COMPANY

以下のような結果が得られます、その中でsqlite_autoindex_COMPANY_1これは暗黙的なインデックスです、この形式のインデックスは、テーブル自体を作成する際に作成されます。

salary_indexsqlite_autoindex_COMPANY_1

以下のように、すべてのインデックスデータベース範囲をリストすることができます:

sqlite> SELECT * FROM sqlite_master WHERE type = 'index';

DROP INDEXコマンド

SQLiteを使用することができます DROPインデックスの削除コマンドを実行します。インデックスの削除は慎重に行いましょう、パフォーマンスが低下したり向上したりする可能性があります。

以下は基本的な语法です。-

DROP INDEX index_name;

以下の文を使用して以前に作成したインデックスを削除できます。

sqlite> DROP INDEX salary_index;

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

インデックスはデータベースのパフォーマンスを向上させるために設計されていますが、時にはそれらの使用を避けるべきです。以下のガイドラインは、インデックスの使用を再考すべき時を指示します。

インデックスは以下に使用されません-

  • 小さなテーブル。

  • 頻繁に大量のバッチ更新や挿入操作が行われるテーブル。

  • 多くの NULL 値を含む列。

  • よく操作される列。