@DjimiDjimi

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

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


при записях скажем в 10 строк это не страшно, а как быть например при 500+ строк, сильно ли скажется такой метод на производительности? или лучше как то считывать но 10 строк, как реализовано в больших проектах, без особой нагрузке на сервер? Или же это нормально считывание таких больших значений за раз?
  • Вопрос задан
  • 150 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Всё зависит от решаемой кодом задачи. Если это вывод всех пользователей, например в админке, то нормально. А если вы таким образом проверяете наличие пользователя при аутентификации, то очень плохо.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
be_a_dancer
@be_a_dancer
Middle 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) {
// Тут код
}
Ответ написан
@VasiliyMakogon
PHP-разработчик
а как быть например при 500+ строк, сильно ли скажется такой метод на производительности?
возьми да сосчитай 500+ строк, в чем вопрос то?

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

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

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