Het zou beter zijn, want het versnelt het zoeken bij het sorteren in deze kolom. En naar buitenlandse sleutels wordt veel gezocht.
Sinds versie 5 van rails wordt de index automatisch aangemaakt, voor meer informatie zie hier .
Nee, dit gebeurt al met rails
Nee, hetzelfde als hierboven
Dan is de index een gecombineerde index van de twee kolommen. Dat slaat nergens op, tenzij u alle vermeldingen voor één category_id
. wilt EN één state_id
(Het moet category_id
zijn niet category
) tegelijkertijd.
Een index als deze zou het volgende verzoek versnellen:
# 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)
Waar
add_index :users, :category_id
add_index :users, :state_id
zal deze verzoeken versnellen:
# 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)
Nee, want als je dit doet, kan er maar één gebruiker in één categorie zitten, maar de betekenis van categorie is dat je er meer veel kunt plaatsen gebruiker in één categorie. In uw User
model heb je zoiets als dit belongs_to :category
en in je categoriemodel zoiets als has_many :users
. Als je een has_many
. hebt relatie de foreign_key
veld mag niet uniek zijn!
Voor meer gedetailleerde informatie hierover moet je een kijkje nemen op tadman 's geweldige antwoord .