railsでのパーティショニング使用

パーティショニングそのものについてはmysql5.1のパーティショニングを使う - d2mrの日記参照

rails経由でパーティショニングの追加をmigrationファイルに以下のように記述する

class AddPartition < ActiveRecord::Migration
  def self.up
    # パーティショニングに使う値がプライマリキーでないと怒られるので複合キーに変更する
    execute("ALTER TABLE entries DROP PRIMARY KEY, ADD PRIMARY KEY (id, updated_at);")

    # パーティショニングの追加
    execute("ALTER TABLE entries PARTITION BY RANGE (TO_DAYS(updated_at)) (PARTITION p200803 VALUES LESS THAN (TO_DAYS('2008-04-01')), PARTITION p200804 VALUES LESS THAN (TO_DAYS('2008-05-01')));")
  end

  def self.down
    # パーティショニングの取り消し
    execute("ALTER TABLE entries REMOVE PARTITIONING;")
    # id プライマリキーに戻す
    execute("ALTER TABLE entries DROP PRIMARY KEY, ADD PRIMARY KEY (id);")
  end
end

複合主キー(composite primary keys)を扱うことになるが、
実質的な主キーはidのみなのでアプリ側を変更する必要はありません