auの日記

プログラミング初心者の日記。(auはハンドルネームです)

SQLite3でインデックスの作成

auです。
今回は前回説明したインデックスを作成していこうと思います。

インデックスの作成の仕方

インデックスは以下のようにして作成します。

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

テーブル作成と似ているようで少し違います。SQLite3を使ってみて思うのは、少し英文っぽいなぁって思います。
実際にやってみます。
実際に使用するテーブルは毎度のようにこれを使います。

SELECT * FROM user;
id          name        address     CULUMN
----------  ----------  ----------  ----------
1           Sato        東京
2           Tanaka      神奈川
3           Saito       埼玉
4           Goto        群馬

idとnameを指定したindexを作成します。インデックス名はuser_id_nameでやりたいと思います。

CREATE INDEX user_id_name ON user(id, name);

これを入力した際にエラーが起きなければ正常に作成されているはずです。

作成済みのインデックスを確認する

インデックスの一覧をみるには「.indices」を使用します。

 .indices
user_id_name

めちゃめちゃシンプルな感じで返されました。

SELECT * FROM sqlite_master;
type        name        tbl_name    rootpage    sql
----------  ----------  ----------  ----------  ---------------------------
table       book        book        2           CREATE TABLE book(id, name)
table       book2       book2       3           CREATE TABLE book2(id integ
table       member      member      4           CREATE TABLE member(id inte
table       sqlite_seq  sqlite_seq  7           CREATE TABLE sqlite_sequenc
table       user        user        6           CREATE TABLE user(id INTEGE
view        customer    customer    0           CREATE VIEW customer AS SEL
view        customer2   customer2   0           CREATE VIEW customer2 AS SE
index       user_id_na  user        5           CREATE INDEX user_id_name O

一覧をみる「sqlite_master」でもtype = indexがあることが確認できました。
indexだけに絞ってみます。

SELECT * FROM sqlite_master WHERE type = "index";
type        name          tbl_name    rootpage    sql
----------  ------------  ----------  ----------  -------------------------------------------
index       user_id_name  user        5           CREATE INDEX user_id_name ON user(id, name)

indexは「""」で囲まなければ反応してくれませんでした。

個人的な疑問

indexを作成しましたが、中身を確認する方法を探してもなぜか見つけることができませんでした。検索の仕方が間違っているのか、もともと無いのかわかりませんが、現状確認することができませんでした。もし確認するコマンドを知っているという方がいましたら、コメント等で教えていただきたいです。