Получение всех данных в одном запросе и обработке в PHP и повторение запросов для каждой части данных

Я заранее знаю, что мне понадобится куча строк из определенной таблицы, но я не знаю, в каком порядке мне понадобится каждый.

В целом, с точки зрения производительности и наилучшей практики, лучше ли:

  1. Сделайте один общий запрос, который возвращает все строки, которые, как я знаю, мне в конечном итоге понадобится, а затем используйте PHP (или что-то еще), чтобы выбрать каждый из них, поскольку он мне нужен; или,

  2. Делайте много запросов, используя WHERE, чтобы выбирать только каждую строку, сколько мне нужно.

Количество строк, которые мне понадобятся, примерно 300-600, и страница не должна загружаться более чем несколько раз в минуту (хотя я бы хотел выбрать решение, которое будет справляться с более тяжелыми нагрузками, чем это) ,

Изменить для получения дополнительной информации: Я использую PostgreSQL. С течением времени таблица станет довольно большой, возможно, со многими тысячами строк. Я могу определить, прежде чем делать какие-либо запросы точно, какие строки мне понадобятся (как я сказал, n ~ 500), но я не знаю, какой порядок мне понадобится. Так что это либо 1 запрос, либо n PHP ищет конкретные значения в массиве или n запросов с различным предложением WHERE каждый раз. Я склоняюсь к первому.

Solutions Collecting From Web of "Получение всех данных в одном запросе и обработке в PHP и повторение запросов для каждой части данных"

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

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

Лучший вариант – вытащить ваши записи из РСУБД в том порядке, в котором они вам понадобятся с ORDER BY . Тогда случайный доступ не является проблемой.

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

EDIT При извлечении строк создайте индекс массива. Теперь вам не нужно искать массив, так как вы можете просто получить доступ к нему по индексу.

 $rowset = array(); while ($row = pg_fetch_assoc($result)) { // Append rows to $rowset indexed by the 'id' column // Use whatever column you'll need to be searching with PHP $rowset[$row['id']] = $row; } 

Создайте динамический SQL-запрос с соответствующим фильтром в предложении WHERE. Вы не должны тянуть наихудший случай 600 строк по проводам и в память – это не очень хороший дизайн.