sql >> Database >  >> RDS >> Mysql

Wanneer moet je welke indexen toevoegen aan een tabel in Rails

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 .



  1. Hoe cascade aan te houden met behulp van JPA/EclipseLink

  2. Kan MySQL op betrouwbare wijze back-ups herstellen die views bevatten of niet?

  3. MySQL:kunt u een willekeurige limiet opgeven?

  4. Uw Access-database migreren naar SQL Server