Задать вопрос

Создает ли нагрузку такой код?

Начали сайты глючить, и хостер говорит что это через нагрузку CPU до 100%
$post = $pdo->prepare('SELECT * FROM post ORDER BY id DESC LIMIT 5');
$post->execute();
while ($news = $post->fetch(PDO::FETCH_LAZY)){
// tra-ta-ta
}
  • Вопрос задан
  • 202 просмотра
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 3
Нагрузку создаёт любой код)
Ответ написан
suguby
@suguby
программист, python, django, mysql, git, hg, linux
1) ну, можно сказать что SELECT * создает нагрузку, если таблица широкая - тогда мускуль все колонки копирует в область памяти для сортировки. надо выбирать только то что нужно.
2) еще нужно посмотреть есть ли B-tree-индекс для id - помогает для сортировки иногда.
3) еще хинт - иногда, для больших (от сотен тысяч записей) таблиц лучше вытянуть только айдишники записей
SELECT id FROM post ORDER BY id DESC LIMIT 5
- тогда при наличии B-tree-индекса сортировка вообще не будет производится - все уже отсортировано в индексе. А потом тянуть остальные поля отдельным запросом.
SELECT ... FROM post WHERE id in (...)
и сортировать на клиенте :)
Ответ написан
Комментировать
могу предположить следующее: таблица post очень большая (много записей), в этом случае индекс по первичному ключу может не уместиться в буфере (см. настройки), следовательно СУБД будет читать все значения таблицы, сортировать их и выдавать результат
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽