Присоединяйтесь к нашему каналу и погрузитесь в мир баз данных
Связь: @devmangx
РКН: https://clck.ru/3H4Wo3
Post #1609
2.17K

Не используй CASE в WHERE
Один из самых частых SQL анти-паттернов это пихать
Классический пример:
Работает, но часто убивает производительность, потому что
Лучше переписать так:
Этот вариант лучше, потому что логика становится прямолинейной и без лишних условий. Запрос проще читать, проще поддерживать, и оптимизатору проще рассуждать о предикатах, потому что они “голые”, без обертки в логическое ветвление.
👉 @SQLPortal
Один из самых частых SQL анти-паттернов это пихать
CASE прямо в WHERE, чтобы разрулить условную логику для диапазонов или фильтров.Классический пример:
SELECT * FROM products
WHERE
CASE WHEN category = 'Electronics' THEN price < 500 ELSE price < 100 END;
Работает, но часто убивает производительность, потому что
CASE делает предикат не SARGable в большинстве популярных СУБД. Оптимизатор уже не может нормально сделать index seek по индексу на price (или по составному индексу (category, price)). В итоге нередко получаешь full table scan, даже если индексы отличные.Лучше переписать так:
SELECT * FROM products
WHERE price < 100
OR (category = 'Electronics' AND price < 500);
Этот вариант лучше, потому что логика становится прямолинейной и без лишних условий. Запрос проще читать, проще поддерживать, и оптимизатору проще рассуждать о предикатах, потому что они “голые”, без обертки в логическое ветвление.
👉 @SQLPortal
- 👍 10
- ❤ 3










