SQLite 3では?インデックスの名前はユニークである必要がある

Crêpeのおかげで最近はSQLite 3にどっぷりで、SQLでデータベースを操作するのは非常に楽しいです。

SQLiteではというか、SQLでは高速に検索を実行するためにはインデックスの作成がかかせません。
インデックスを作成しているかしていないかで検索スピードが100倍以上変わることも珍しくありません。

そのためインデックスを作成する訳ですが、 次のような構文で作成することができます。

CREATE INDEX idx_hoge ON piyo(hoge);

piyoがテーブル名、hogeが列名になり、作成されるidx_hogeがhogeに対するインデックス名になります。

逆にインデックスを削除するときは

DROP INDEX idx_hoge;

です。ただ、いつも参考にしている本の一つ、「ぐんぐん実力がつく! 逆算式SQL教科書」ではMySQLを使っている関係上、構文は次のようになります。

DROP INDEX idx_hoge ON piyo(hoge);

ぐんぐん実力がつく! 逆算式SQL教科書
著者: 小野哲
ページ数: 288ページ
出版社: 技術評論社
発売日: 2007年12月26日

これらの構文を見て勝手に勘違いをしました(自分が勝手に勘違いをしただけで、この本自体は何度も参照するとても良い本です)。
インデックス名は同じテーブル内でユニークであればいいと。

でも実際にSQLite 3でスキーマを調べられる.schema命令を使ってみると、作成されていませんでした。
今まではRubyでCREATE INDEXをしていたので、そのときはなぜかエラーが出ていなかったので気づきませんでした(どうもいままではほぼ主キーを使っていたのでうまいこといっていたらしい)。

MySQLでは調べたりなくて、同じなのかどうかちょっとわからないのですが、これからインデックスを作成する際には

CREATE INDEX idx_piyo_hoge ON piyo(hoge);

のようにインデックス名にテーブル名も含めようと思います。