SQLite3にmigrationでadd_indexしても速くならない

Railsのmigrationで、add_indexというのがあります。
これをするとインデックスが作成されるので速くなるということで、こんなことをしていました。

class AddIndexToCount < ActiveRecord::Migration
  def self.up
    add_index  :counts,  :column1
    add_index  :counts,  :column2
    add_index  :counts,  :column3
  end

  def self.down
    remove_index :counts, :column1
    remove_index :counts, :column2
    remove_index :counts, :column3
  end
end
CREATE INDEX "index_counts_on_column1" ON counts ("column1")
CREATE INDEX "index_counts_on_column2" ON counts ("column2")
CREATE INDEX "index_counts_on_column3" ON counts ("column3")

使い方くらい調べないといけないですよねぇ。これでは全く高速化されない。

TkSQLiteの機能を使ってインデックスを追加すると、以下のようなSQLが実行され、500ms->3msと100倍以上高速になりました。

CREATE INDEX 'counts_idx' ON 'counts' ('column1', 'column2', 'column3')

migrationでこのようなインデックスを作成するには、以下のようにします。

class AddIndexToCount < ActiveRecord::Migration
  def self.up
    add_index :counts, [:column1, :column2, :column3], :name=>:counts_idx
  end
  
  def self.down
    remove_index :counts, :name=>:counts_idx
  end
end

はあ、今までのデータベース全部更新しなくては。