TGViewer
SQL Portal | Базы Данных SQL Portal | Базы Данных @sqlportal · 13.9K subscribers
Post #1609 2.17K
Не используй CASE в WHERE

Один из самых частых 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
More from @sqlportal
  1. Oct 14, 2026Числовые функции SQL: от округления до итогов 🔢 Они помогают обрабатывать числа и выполня…
  2. Oct 13, 2026Быстрый SQL начинается с продуманных запросов 1. Выбирайте только нужные столбцы. Вместо S…
  3. Oct 13, 2026SQL помогает получить данные. Статистика — понять, что они означают 20 статистических поня…
  4. Oct 12, 2026Команды SQL проще запомнить по назначению • DDL — создание и изменение структуры БД: CREAT…
  5. Oct 12, 2026Pandas: Python для повседневных задач аналитика 🐼 Загрузить файлы с неаккуратными данными…
  6. Oct 11, 2026Чтобы запросы оставались быстрыми, понятными и справлялись с ростом объёма данных, нужны х…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →