Сразу оговорюсь, что я не программист и каких-то базовых вещей не знаю. Работает и отлично - моя методика. На небольших задачах проблем с этим не возникает.
Но сейчас надо решить, как построить работу вычисления. Обрабатываться будет много записей, поэтому хочется верно спроектировать работу.
Задача сразу на примере: надо запросить все договора (5000 шт например), а потом по каждому договору из таблицы расходы вытащить расходы (то есть ещё 5000 записей).
2 варианта решения:
1. Делаем 1 основной sql запрос на договора и перебираем записи в цикле. В каждом договоре делаем под запрос на расход. То есть получается 1+5000=5001 запрос.
2. Делаем 1 запрос к таблице расходы по всем строкам и сохраняем их в php массив. Строк может быть не 5000 как договоров, а больше. То есть лишние ещё сохраняем.
Делаем 2й запрос к договорам и перебирая строки договоров просто ищем нужную строку в php массиве.
Во втором варианте получается 2 запроса больших и работас php массивом.
Склоняюсь чисто по количеству запросов ко второму варианту. Но нет ли каких-то но? Может большой php массив труднее обрабатывать, чем 5000 мелких sql запросу? Вот в этом я не разбираюсь, прошу помощи. Как правильнее?
Скрипт этот будет висеть в кроне и делать пересчет раз в какое-то время. Уверен работали бы оба варианта и мощностей бы хватило, но хочется если есть возможность оптимизировать ресурсы.
2
Как правильнее: много sql запросов или разбор массива?
Автор plotnikov, 12 июня 2018 11:41
Сообщений в теме: 3
#1
Отправлено 12 Июнь 2018 - 11:41
#2
Отправлено 12 Июнь 2018 - 17:28
в большинстве случаев использую вариант №2 (2 запроса и обработка массивов)
#3
Отправлено 13 Июнь 2018 - 14:26
По производительности однозначно второй вариант выигрывает даже не в разы, а на порядок. Единственно что большой массив может всю выделенную оперативку съесть и скрипт отвалится по ошибке.
Но возможно вы не учли вариант №3, который самый оптимальный: сделать вообще только 1 запрос, но сразу к двум таблицам со связью между ними через JOIN. Тогда и лишних записей нет, и лишних запросов, и массив не нужен. Но тут запрос надо уметь грамотно составить.
Но возможно вы не учли вариант №3, который самый оптимальный: сделать вообще только 1 запрос, но сразу к двум таблицам со связью между ними через JOIN. Тогда и лишних записей нет, и лишних запросов, и массив не нужен. Но тут запрос надо уметь грамотно составить.
#4
Отправлено 13 Июнь 2018 - 17:01
Спасибо всем
Количество пользователей, читающих эту тему: 2
0 пользователей, 2 гостей, 0 анонимных