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