SQLite | インデックス | インデックスを作成する

SQLiteでインデックスを作成する方法と、データベース内のインデックスを一覧表示する方法を説明します。

CREATE INDEX文でインデックスを作成する

構文は次のとおりです。

CREATE INDEX インデックス名 ON テーブル名 (列名1, 列名2, ...);

インデックスはテーブルの列を対象とします。1つの列だけでなく、複数列の組み合わせにも作成できます。

例で使用するテーブルを作成します。

create table user (name text, old integer, address text);
sqlite> create table user (name text, old integer, address text);
sqlite> 

データを追加します。

insert into user values ('devkuma', 28, 'Seoul');
insert into user values ('kimkc', 22, 'Busan');
insert into user values ('araikuma', 32, 'Seoul');
insert into user values ('happykuma', 23, 'Seoul');
insert into user values ('mykuma', 23, 'Daejeon');
sqlite> insert into user values ('devkuma', 28, 'Seoul');
sqlite> insert into user values ('kimkc', 22, 'Busan');
sqlite> insert into user values ('araikuma', 32, 'Seoul');
sqlite> insert into user values ('happykuma', 23, 'Seoul');
sqlite> insert into user values ('mykuma', 23, 'Daejeon');
sqlite> 

name列にnameindexというインデックスを作成します。

create index nameindex on user (name);
sqlite> create index nameindex on user (name);
sqlite> 

これでインデックスが作成されました。

インデックスを使ったデータ検索

インデックスによって検索が高速になる場合がありますが、インデックスの有無によってクエリの書き方が変わることはありません。SQLiteはクエリ実行時に適切なインデックスを自動的に使用します。

select * from user where name = 'devkuma';
sqlite> select * from user where name = 'devkuma';
devkuma|28|Seoul

クエリでインデックスを明示的に指定する必要はありません。

データベース内のインデックスを一覧表示する

SQLiteの.indicesコマンドを使います。

.indices
.indices? TABLE?

引数を省略するとすべてのインデックスを表示し、テーブル名を指定すると一致するテーブルのインデックスを表示します。

.indices
sqlite> .indices
nameindex
sqlite>

このページで作成したインデックスが表示されます。

sqlite> .indices user
nameindex
sqlite>

2番目のコマンドでは、userテーブルを対象とするnameindexが表示されます。