2010-10-12 3 views
1

Быстрее ли выполнять один запрос базы данных, который находит все результаты, необходимые для страницы, а затем выполняет несколько циклов с помощью инструкций if/else для извлечения того, что вы хотите показать в каждом разделе, или выполнить несколько запросов к базе данных, выбрав точные данные, которые вам нужны, а затем просто пропустите каждую из них отдельно?Оптимизация использования запросов к базе данных

Например:

@completed = HostTask.find(:all, :include => [:task], :conditions =>["host_tasks.decommission_id = ? AND host_tasks.completed IS NOT NULL", params[:id]], :order => "tasks.position") 
@incomplete = HostTask.find(:all, :include => [:task], :conditions =>["host_tasks.decommission_id = ? AND host_tasks.completed IS NULL", params[:id]], :order => "tasks.position") 

Затем цикл через каждый для отображения. Или просто:

@tasks = HostTask.find(:all, :include => [:task], :conditions =>["host_tasks.decommission_id = ?", params[:id]], :order => "tasks.position") 

Зацикливание через @tasks дважды и отображение только в том случае, если @ tasks.completed равно null, а не null?

ответ

1

многократные обратные поездки являются дорогостоящими, но выбор более необходимых данных является дорогостоящим. только выбор точных данных с несколькими запросами db и не попытка использования сложной ненормальной бизнес-логики является предпочтительным способом в большинстве случаев, но это зависит от случая использования. Я рекомендую кэширование, кеширование, кеширование. Вы можете получить огромные преимущества.

+1

+1 Как всегда, «это зависит». –

1

Я думаю, что будет «быстрее» сделать один запрос, поскольку соединение с db и вызов дорого. Используете ли вы сервер приложений или какой-либо другой пул соединений? что может помочь Зависит от того, сколько данных вы возвращаете.

+0

менее 500 строк определенно – Rumpleteaser

Смежные вопросы