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

Quando aggiungere quali indici in una tabella in Rails

Sarebbe meglio, perché accelera la ricerca nell'ordinamento in questa colonna. E le chiavi esterne sono qualcosa che si cerca molto.

Dalla versione 5 di rails l'indice verrà creato automaticamente, per ulteriori informazioni vedere qui .

No, questo è già fatto su rotaie

No, come sopra

Quindi l'indice è un indice combinato delle due colonne. Questo non ha alcun senso, a meno che tu non voglia tutte le voci per un category_id E un state_id (Dovrebbe essere category_id non category ) contemporaneamente.

Un indice come questo velocizzerebbe la seguente richiesta:

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

Dove

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

accelererà queste richieste:

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

No, perché se lo fai, un solo utente può essere in una categoria, ma il significato di categoria è che puoi metterne più molti utente in una categoria. Nel tuo User modello hai qualcosa del genere belongs_to :category e nel tuo modello di categoria qualcosa come has_many :users . Se hai un has_many relazione con la foreign_key il campo non deve essere univoco!

Per informazioni più dettagliate su questo dovresti dare un'occhiata a tadman è fantastico risposta .