Define index lengths in your migrations

posted on 27 May 2009 | Rails

Defining an index length is a common practice in order to avoid large data indexes, and improve performance. Some time ago, I sent a patch to Rails core, which added the functionality to define index lengths in the migrations. For example:

add_index(:accounts, [:name, :surname], :name => 'by_name_surname', :limit => 10)

While I wait a decission from the Rails core members about this patch, I decided to release this functionality built-in in a plugin.

With this plugin, you can specify index lengths in your migrations easily. Here are some examples:

add_index(:accounts, :name, :limit => 10)

generates CREATE INDEX by_name ON accounts(name(10))

add_index(:accounts, [:name, :surname], :name => 'by_name_surname', :limit => 10)

generates CREATE INDEX by_name_surname ON accounts(name(10), surname(10))

add_index(:accounts, [:name, :surname], :name => 'by_name_surname', :limit => {:name => 10, :surname => 20})

generates CREATE INDEX by_name_surname ON accounts(name(10), surname(20))

You can download it from my GitHub repo github.com/eparreno/mysql_index_length/