@DjimiDjimi

Как уменьшить нагрузку при использовании foreach для считывания БД?

Прошу прощение не знал как сформулировать запрос, суть заключается в следующем. С помощью foreach я считываю БД:
foreach (DataBase::getDb()->getRow('SELECT * FROM ' . Config::DB_TABLE_USERS) as $row) {
// Тут код
}


при записях скажем в 10 строк это не страшно, а как быть например при 500+ строк, сильно ли скажется такой метод на производительности? или лучше как то считывать но 10 строк, как реализовано в больших проектах, без особой нагрузке на сервер? Или же это нормально считывание таких больших значений за раз?
  • Вопрос задан
  • 168 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Всё зависит от решаемой кодом задачи. Если это вывод всех пользователей, например в админке, то нормально. А если вы таким образом проверяете наличие пользователя при аутентификации, то очень плохо.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
be_a_dancer
@be_a_dancer
Backend/Fullstack Developer
Согласен с Rsa97. Но хочу немного дополнить. В случае с выводом пользователей лучшим решением всегда будет ограничить максимальную длину вывода, предположим, 50-ю записями и добавить пагинацию (ключевые слова Order by, Limit, Offset).
Ответ написан
Комментировать
RomaZveR
@RomaZveR
CEO AlertMoney, PHP/Golang Developer
Пагинация это вечный гемор. Offset на больших объёмах будет жестко тормозить, а если еще и нагрузка большая по запросам то совсем беда.
Такие пагинации в открытый мир лучше не выпускать, я обычно это использую в админке, или лк пользователя, в общем в местах где нагрузка около нуля.
Для всех остальных случаев я бы советовал курить пагинацию на основе первичных ключей, сначала будет больно все это писать, но потом приятно ;)

Тут очень хорошо про это расписано
Ответ написан
VladimirAndreev
@VladimirAndreev
php web dev
10 строк или 500 - разницы практически нет. при 500 записях анализатор, скорее всего, даже индексы использовать поленится :-)
Ответ написан
Комментировать
@DimaWeb
$users  = DataBase::getDb()->getRow('SELECT * FROM ' . Config::DB_TABLE_USERS);
foreach ($users as $row) {
// Тут код
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы