Перейти к содержимому


Как правильнее: много sql запросов или разбор массива?


Сообщений в теме: 3

#1 plotnikov

    Активный участник

  • Пользователи
  • PipPipPip
  • 155 сообщений

Отправлено 12 Июнь 2018 - 11:41

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

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

Задача сразу на примере: надо запросить все договора (5000 шт например), а потом по каждому договору из таблицы расходы вытащить расходы (то есть ещё 5000 записей).

2 варианта решения:

1. Делаем 1 основной sql запрос на договора и перебираем записи в цикле. В каждом договоре делаем под запрос на расход. То есть получается 1+5000=5001 запрос.

2. Делаем 1 запрос к таблице расходы по всем строкам и сохраняем их в php массив. Строк может быть не 5000 как договоров, а больше. То есть лишние ещё сохраняем.
Делаем 2й запрос к договорам и перебирая строки договоров просто ищем нужную строку в php массиве.
Во втором варианте получается 2 запроса больших и работас php массивом.

Склоняюсь чисто по количеству запросов ко второму варианту. Но нет ли каких-то но? Может большой php массив труднее обрабатывать, чем 5000 мелких sql запросу? Вот в этом я не разбираюсь, прошу помощи. Как правильнее?

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

#2 AntonKravchenko

    Активный участник

  • Пользователи
  • PipPipPip
  • 152 сообщений
  • Пол:Мужчина
  • Город:Нижний Новгород

Отправлено 12 Июнь 2018 - 17:28

в большинстве случаев использую вариант №2 (2 запроса и обработка массивов)

#3 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 13 Июнь 2018 - 14:26

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

Но возможно вы не учли вариант №3, который самый оптимальный: сделать вообще только 1 запрос, но сразу к двум таблицам со связью между ними через JOIN. Тогда и лишних записей нет, и лишних запросов, и массив не нужен. Но тут запрос надо уметь грамотно составить.

#4 plotnikov

    Активный участник

  • Пользователи
  • PipPipPip
  • 155 сообщений

Отправлено 13 Июнь 2018 - 17:01

Спасибо всем





Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных