>_ IzzyLab

Практическое задание

PostgreSQL: seq scan → index scan

сложно

В базе shop таблица events (100 000 строк) без индексов — запрос SELECT * FROM events WHERE user_id = 42 идёт через Seq Scan. Создай индекс по user_id, чтобы планировщик перешёл на индексный доступ, и сохрани план запроса (EXPLAIN) в /root/plan.txt.

Что потренируешь:
  • explain
  • seq scan
  • index scan
  • analyze
  • postgresql

Разбор темы

Без индекса запрос с фильтром по столбцу заставляет Postgres читать всю таблицу строка за строкой — это Seq Scan, стоимость которого растёт линейно с размером таблицы. Индекс по столбцу фильтра позволяет планировщику прыгнуть сразу к нужным строкам; после его создания стоит обновить статистику (ANALYZE), иначе планировщик может по инерции остаться на последовательном сканировании. Выбранный план смотрят командой EXPLAIN: в выводе последовательное сканирование должно смениться индексным (Index Scan или Bitmap Index Scan — оба нормальны).

Что проверяется

  1. создан индекс по user_id
  2. план запроса использует индекс

Как это выглядит