SA Шпаргалка

Все ответы в 2 клика

Продвинутый

Почему использование функции в WHERE (например, WHERE DATE(created_at) = '2023-01-01') замедляет запрос?

Если вы оборачиваете колонку в функцию (например, DATE(), LOWER(), UPPER()), СУБД не может использовать обычный B-Tree индекс, построенный для этой колонки.

СУБД придется применить эту функцию к каждой строке таблицы (Full Table Scan), чтобы сравнить результат с вашим условием.

✅ Как исправить:
1. Переписать условие: WHERE created_at >= '2023-01-01' AND created_at < '2023-01-02' (индекс сработает).
2. Создать функциональный индекс: CREATE INDEX idx_date ON orders (DATE(created_at)); (СУБД заранее вычислит функцию и сохранит результат в индекс).

Сложная тема? Разберём на мок-интервьюЗаписаться на менторство →

Другие вопросы темы «Сканирование в PostgreSQL»

Ещё вопросы раздела «SQL и БД»

Все вопросы раздела «SQL и БД»