Поиск по email в таблице на 5 млн строк занимает две секунды
Запрос авторизации выполняется около двух секунд:
SELECT id, name FROM users WHERE email = 'ivan@example.com';
В таблице 5 млн строк. План выполнения показывает Seq Scan по users. Индексов на колонке email нет.
Что происходит и что делать?
- База последовательно читает всю таблицу; индекс по email превратит это в точечный поиск
- Нужно добавить LIMIT 1: база остановится на первом совпадении, и запрос ускорится
- Дело в настройках памяти: увеличение work_mem уберёт последовательное чтение таблицы
- Виновата ORM — тот же самый запрос через raw SQL выполнится в разы быстрее
