Mysql
 sql >> Base de données >  >> RDS >> Mysql

Quand ajouter quels index dans une table dans Rails

Ce serait mieux, car cela accélère la recherche en triant dans cette colonne. Et les clés étrangères sont souvent recherchées.

Depuis la version 5 de rails, l'index sera créé automatiquement, pour plus d'informations, voir ici .

Non, cela se fait déjà par rails

Non, comme ci-dessus

L'index est alors un index combiné des deux colonnes. Cela n'a aucun sens, sauf si vous voulez toutes les entrées pour un category_id ET un state_id (Ce devrait être category_id pas category ) en même temps.

Un index comme celui-ci accélérerait la requête suivante :

# rails 2
User.find(:all, :conditions => { :state_id => some_id, :category_id => some_other_id })

# rails 3
User.where(:state_id => some_id, :category_id => some_other_id)

add_index :users, :category_id
add_index :users, :state_id

accélérera ces requêtes :

# rails 2+3
User.find_by_category_id(some_id)
User.find_by_state_id(some_other_id)

# or
# rails 2
User.find(:all, :conditions => {:category_id => some_id})
User.find(:all, :conditions => {:state_id => some_other_id})

# rails 3
User.where(:category_id => some_id)
User.where(:state_id => some_other_id)

Non, car si vous faites cela, un seul utilisateur peut être dans une catégorie, mais le sens de la catégorie est que vous pouvez en mettre plus beaucoup utilisateur dans une catégorie. Dans votre User modèle vous avez quelque chose comme ça belongs_to :category et dans votre modèle de catégorie quelque chose comme has_many :users . Si vous avez un has_many relation la foreign_key le champ ne doit pas être unique !

Pour des informations plus détaillées à ce sujet, vous devriez jeter un œil à tadman c'est super répondre .