SELECT * - скрытый враг в проде

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
9,447
Реакции
1,548
Credits
33,143
photo_2025-04-21_10-25-09.jpg
На dev-сервере всё шустро. В проде — беда: запросы висят, база потеет. И вроде бы всё ок... пока не заглянешь в SQL:
SQL:
SELECT * FROM users WHERE status = 'active';
На первый взгляд — удобно. Но:

Проблемы “SELECT *”:
– Тянет все колонки, даже ненужные. А их может быть 30+.
– Увеличивает нагрузку на сеть и память приложения.
– Ломает кэш — ведь даже малейшие изменения в колонках меняют структуру результата.
– Убивает индекс-only scan: Postgres не может использовать покрывающий индекс, если явно не указаны поля.

Как надо:
Выбирай только нужные поля:
SQL:
SELECT id, name, email FROM users WHERE status = 'active';
Хочешь “быстро протестить” в dev-е? Ок. Но не пускай такое в прод. Автоматизируй линтинг SQL, если надо.

Вывод:
SELECT * — это не “удобно”, это дорого. И ты за него уже платишь.
Сохрани, чтобы не словить боль в проде.