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

Начали сайты глючить, и хостер говорит что это через нагрузку 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
}
  • Вопрос задан
  • 201 просмотр
Пригласить эксперта
Ответы на вопрос 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 очень большая (много записей), в этом случае индекс по первичному ключу может не уместиться в буфере (см. настройки), следовательно СУБД будет читать все значения таблицы, сортировать их и выдавать результат
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы