Personne n'ignore que poser des index sur les clés primaires et étrangères augmente les performances des requêtes du sgbd.
https://fr.wikipedia.org/wiki/Index_(base_de_donn%C3%A9es)
Voici une migration magique. Elle ne gère pas les clés étrangères sur les tables de jointure (je n'ai pas pris le temps de le faire, mais si vous le faites postez-moi un commentaire)
class AddIndexes < ActiveRecord::Migration
def self.up
c = ActiveRecord::Base.connection
ts = c.tables
ts = ts - ["schema_migrations"]
ts.each do |t|
begin
tablefields = eval(t.camelize.singularize + '.column_names')
for ff in tablefields
if ff == 'id' or not (ff =~ /.*_id/).nil? then
add_index t, ff, :name => "index_#{t}_on_#{ff}"
end
end
rescue
puts "Erreur sur les tables de jointure"
end
end
end
def self.down
c = ActiveRecord::Base.connection
ts = c.tables
ts = ts - ["schema_migrations"]
ts.each do |t|
begin
tablefields = eval(t.camelize.singularize + '.column_names')
for ff in tablefields
if ff == 'id' or not (ff =~ /.*_id/).nil? then
remove_index t, :name => "index_#{t}_on_#{ff}"
end
end
rescue
puts "Erreur sur les tables de jointure"
end
end
end
end