Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Quando adicionar quais índices em uma tabela no Rails


Seria melhor, pois acelera a busca na ordenação nesta coluna. E as chaves estrangeiras são algo muito procurado.

Desde a versão 5 do Rails o índice será criado automaticamente, para mais informações veja aqui .

Não, isso já é feito por trilhos

Não, igual ao anterior

Então o índice é um índice combinado das duas colunas. Isso não faz sentido, a menos que você queira todas as entradas para um category_id E um state_id (Deve ser category_id não category ) ao mesmo tempo.

Um índice como esse aceleraria a seguinte solicitação:
# 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)

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

irá acelerar esses pedidos:
# 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)

Não, porque se você fizer isso, apenas um usuário pode estar em uma categoria, mas o significado de categoria é que você pode colocar mais muitos usuário em uma categoria. Em seu User model você tem algo assim belongs_to :category e no seu modelo de categoria algo como has_many :users . Se você tiver um has_many relacionamento a foreign_key campo não deve ser único!

Para obter informações mais detalhadas sobre isso, você deve dar uma olhada em tadman é ótimo resposta .