Часто запросы не используют индекс, хотя поле индексировано.
Причиной может быть функция в условии:
SELECT * FROM users WHERE lower(email) = 'admin@example.com';
Даже если email проиндексирован, lower(email) ломает возможность использовать индекс.
Вариант решения - индекс по выражению (expression index):
CREATE INDEX users_lower_email_idx
ON users ((lower(email)));
Проверить можно через план запроса:
EXPLAIN ANALYZE
SELECT * FROM users WHERE lower(email) = 'admin@example.com';
🔥 Теперь в плане
Index Scan, а не Full Table Scan.➡️ SQL Ready | #совет
