Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wann welche Indizes in einer Tabelle in Rails hinzugefügt werden sollen

Es wäre besser, weil es die Suche beim Sortieren in dieser Spalte beschleunigt. Und nach Fremdschlüsseln wird viel gesucht.

Seit Version 5 von Rails wird der Index automatisch erstellt, weitere Informationen finden Sie hier .

Nein, das wird bereits von Schienen erledigt

Nein, wie oben

Dann ist der Index ein kombinierter Index der beiden Spalten. Das macht keinen Sinn, es sei denn, Sie wollen alle Einträge für eine category_id UND eine state_id (Es sollte category_id sein nicht category ) gleichzeitig.

Ein Index wie dieser würde die folgende Anfrage beschleunigen:

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

Wo

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

beschleunigt diese Anfragen:

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

Nein, denn wenn Sie dies tun, kann nur ein Benutzer in einer Kategorie sein, aber die Bedeutung der Kategorie ist, dass Sie mehr viele hinzufügen können Benutzer in eine Kategorie. In Ihrem User Modell haben Sie so etwas wie dieses belongs_to :category und in Ihrem Kategoriemodell so etwas wie has_many :users . Wenn Sie einen has_many haben Beziehung der foreign_key Feld darf nicht eindeutig sein!

Nähere Informationen hierzu finden Sie unter tadman ist großartig antworten .