Вступить в клуб →
сложнаявопросSQL и оптимизация запросов

Индекс по status добавили — быстрее не стало, ночная загрузка замедлилась

В таблице orders 12 млн строк, 92% из них в статусе completed. Чтобы ускорить запрос

SELECT id, total FROM orders WHERE status = 'completed' ORDER BY created_at DESC LIMIT 50;

добавили индекс по колонке status. Время ответа не изменилось, EXPLAIN по-прежнему показывает полный проход, а ночная пакетная загрузка 2 млн строк стала заметно дольше.

Выберите два верных объяснения.

правильных вариантов может быть несколько

  • Индекс малоселективный: пройти по нему и сходить в таблицу за 92% строк дороже последовательного чтения, поэтому планировщик его не берёт
  • Каждая вставка теперь дополнительно обновляет индекс, поэтому массовая загрузка стала медленнее
  • Индекс по строковой колонке не используется планировщиком, пока колонка не переведена в тип ENUM или не укорочена префиксом
  • Индекс не подхватился только потому, что после создания не была пересобрана статистика; после её пересбора план изменится
  • Загрузка замедлилась из-за блокировки таблицы, которая держится с момента создания индекса и снимется после перезапуска СУБД

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела