Что дороже? Для вызова цикла или базы данных?

В общем, что дороже? Двухстрочный цикл и один вызов базы данных или вызов базы данных для каждого из N элементов только в одном цикле?

Не ища ответа на микросекунды, просто общее представление о том, какое направление я должен предпринять.

ТИА.

Ответ 1

В общем, чем меньше раз вы попадаете в базу данных, тем лучше. Для этого есть несколько причин, в том числе:

  • База данных сможет лучше оптимизировать, если она может попытаться извлечь все сразу.
  • Вы удаляете все накладные расходы на связь с базой данных несколько раз, что может быть весьма значительным.

Ответ 2

В общем, все, что делается в памяти (для цикла), быстрее, чем то же, что и в сети (вызов базы данных). Однако:

for i = 1 to num_users
    get user from database
end

будет медленнее, чем

get users 1 to num_users from database (in one query)

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

Ответ 3

Это очень зависит.

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

Но если у вас есть тысячи или миллионы элементов, которые просматриваются в одном запросе базы данных, тогда запрос sql будет намного быстрее, поскольку системы баз данных оптимизированы для обработки огромных объемов данных. Но не забудьте создать индексы для ваших таблиц.

Если вы сомневаетесь, вы должны измерить время, которое требуется для каждого метода, и если это просто дает вам более полное представление о том, как работает производительность.

Ответ 4

Просто сделайте снимок: вызовы БД, скорее всего, будут более дорогими. По крайней мере, это то, что я испытал до сих пор...

Ответ 5

В общем, чем меньше вы получаете доступ к базе данных, тем лучше.

Ответ 6

Если вы собираетесь обрабатывать каждый элемент, просто сделайте один звонок, если он не будет использовать возмутительный объем памяти.

Ответ 7

Я думаю, это зависит от того, что вы делаете. В вашем заявлении недостаточно информации.

Вышеуказанные ответы верны, чем меньше вы получаете доступ к базе данных, тем лучше (обычно). Поэтому вы должны попытаться выполнить определенную операцию как можно меньше запросов к базе данных. Единственное исключение из этого, я думаю, будет в тех случаях, когда ваше приложение быстрее, чем база данных, возможно, при сложных преобразованиях данных или при использовании очень неэффективной базы данных.

Обычно, позволяя базе данных делать преобразования данных в заданной форме, обычно быстрее, чем делать их программно, используя курсор в цикле for. Если это не то, что вы привыкли делать, я предлагаю изучить немного больше SQL или получить хорошую книгу, как SQL Cookbook (заметьте: я не связан с О'Рейли, эта книга была очень полезна для меня.)