iPhoneでSQLite3を使う8(インデックス)

テーブルにインデックスをつけましょう。
インデックスとは、本で言うところの目次です。特定の情報を探すときに、本のページを全部読むより、目次だけを読む方が早く読めますよね。それと同じでテーブルにデータを入れた時に、インデックスを作成することで、読み込む量を減らし早くデータを見つけることができるようになります。テーブルでは、テーブルの列(ひとつまたは複数)を指定してインデックスを作成することができます。作成した列を検索条件として指定した時に、素早く該当するデータを見つけることができるようになります。


それだけ聞くといい感じですが、インデックスについて、注意点としては3点あります。
1.列値の種類が少ないとインデックスの意味がない。
日本人テーブルに、性別の格納された列に目次を作ることを想像してみてください。1章-男 P.1、2章-女 P.60000000みたいな目次の本があっても使えませんよね。同じです。
2.インデックスを作るオーバーヘッドがある
読み込みは早くなりますが、目次を作る必要があるのでその分、Insertが遅くなります。そもそも検索で使わない項目にインデックスを作るのはやめましょう。
3.データの少ないテーブルには不要
ページが2ページの本に目次はいりますか?


でわ、作り方ですがCREATE INDEX文を使います。どのテーブルのどの列をインデックスにするのかを指定します。インデックス名はそれらしい名前をつけてください。

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

例で作ったuserinfoテーブルのid列にインデックスを作ってみましょう。idは、twitterでユーザを特定するためのユニーク(重複しない)な値です。

CREATE INDEX idx_id ON userinfo(id);

これで、SELECT文でidを条件検索した場合に、索引が使われ早くデータを絞り込むことができます。