mysql - Does a database query that is ordered in memory require less server resource than including the order in the query of a Rails 3.2 app? -
we have rails 3.2 app has quite few database tables , hitting database quite often. thinking refactoring app place queries in 1 area of application controller. e.g.:
# database queries def get_users_in_a_group @users_in_a_group = user.where("group_id = ?", current_group.id) end
the same query ordered in variety of ways. example @users_in_a_group ordered username, date_of_birth or last_login depending on need. thinking of putting area application follows database queries area, e.g.
# ordered database queries def get_users_in_a_group_ordered_by_username get_users_in_a_group @users_in_a_group_ordered_by_username = @users_in_a_group.order("username") end def get_users_in_a_group_ordered_by_last_login get_users_in_a_group @users_in_a_group_ordered_by_last_login = @users_in_a_group.order("last_login") end
from have read, having fewer , simpler database queries better. think way scenario above works database hit once , ordering done in memory. better or worse on server resources querying database in order e.g.:
@users_in_a_group_ordered_by_last_login = user.where("group_id = ?", current_group.id).order("last_login")
thanks help.
the general rule of thumb let sql can, , can't, let ruby/rails take over.
a small note add, well, take advantage of adding indices database commonly called large quantity tables.
if want compare sql loads, fire .irbc file , add :
if env.include?('rails_env') && !object.const_defined?('rails_default_logger') require 'logger' rails_default_logger = logger.new(stdout) end
finally, answer question, seems if you're calling same group wanting 2 different ways order them, can save collection instance variable, , lazy load ordering depending on selected need.
except you'd want change method :
def get_users_in_a_group @users_in_a_group ||= user.where("group_id = ?", current_group.id) end
in that, if been called, pull have , re-order it.
Comments
Post a Comment