sql >> Database teknologi >  >> RDS >> Mysql

Hvornår skal man tilføje hvilke indekser i en tabel i Rails

Det ville være bedre, fordi det fremskynder søgningen i sorteringen i denne kolonne. Og fremmednøgler er noget, der søges meget efter.

Siden version 5 af rails vil indekset blive oprettet automatisk, for mere information se her .

Nej, det sker allerede med skinner

Nej, det samme som ovenfor

Så er indekset et kombineret indeks over de to kolonner. Det giver ingen mening, medmindre du vil have alle poster for én category_id OG én state_id (Det skal være category_id ikke category ) på samme tid.

Et indeks som dette ville fremskynde følgende anmodning:

# 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)

Hvor

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

vil fremskynde disse anmodninger:

# 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)

Nej, for hvis du gør dette, kan kun én bruger være i én kategori, men meningen med kategori er, at du kan sætte flere mange bruger i én kategori. I din User model du har noget som denne belongs_to :category og i din kategorimodel noget som has_many :users . Hvis du har en has_many forhold foreign_key felt må ikke være unikt!

For mere detaljeret information om dette bør du tage et kig på tadman 's store svar .



  1. Hvad forårsager More er ikke genkendt... fejl, når du kører Postgresql 11 på en Windows-maskine?

  2. Oracle-indstilling pr. brugers standardskema (ændrer ikke en session)

  3. Sådan deaktiveres forespørgselscache med mysql.connector

  4. Sådan løses InnoDB:Kan ikke låse ./ibdata1 mysql fejl?