rails3 – que es mejor código para el rendimiento

¿Cuál es la mejor práctica y me da un mejor rendimiento?

Por ejemplo:

Tengo una tabla de estados que tiene 5 registros y cada registro debe almacenarse en una variable separada.

Método 1:

@new_status = Status.find_by_status("NEW") @inprocess_status = Status.find_by_status("InProcess") @completed_status = Status.find_by_status("Completed") @occupied_status = Status.find_by_status("Occupied") @success_status = Status.find_by_status("Success") 

Método 2:

 statuses = Status.all @new_status = statuses.find {|status| status.status == "NEW"} @inprocess_status = statuses.find {|status| status.status == "InProcess"} @completed_status = statuses.find {|status| status.status == "Completed"} @occupied_status = statuses.find {|status| status.status == "Occupied"} @success_status = statuses.find {|status| status.status == "Success"} 

¿O de alguna otra manera buena?

Esto será aún más eficaz, ya que solo hace una consulta a la base de datos y obtiene solo la cantidad necesaria de datos. Esto es asumiendo que el campo de status es único.

 statuses = Status.where( status: ['NEW', 'InProcess', 'Completed', 'Occupied', 'Success'] ).order(:status) @new_status, @completed_status, @inprocess_status, @occupied_status, @success_status = statuses 

Si hay 5 millones de registros, el método 1 debería ser mejor porque la consulta de la base de datos tiene un mejor rendimiento.

Si solo hay 5 registros, el método 2 es mejor porque solo hay una consulta de base de datos. El método 1 tiene 5 consultas, que consumen mucho tiempo para una pequeña cantidad de registros.

Tiene solo 5 registros, por lo que 5 consultas de base de datos van a ser muy caras, no es una buena práctica.

Puede recuperarlos en la memoria y asignarlos a variables de instancia. Pero puedo ver una simetría en Method2 y parece un código muy simétrico. Recomiendo encarecidamente que no escribas código simétrico en ruby , puedes modificarlo con algo como:

 Status.all.each{|status| instance_variable_set("@#{status.name.downcase}_status" , status ) } 

Creará variables de instancia e inicializará las variables de instancia con los estados respectivos.