Антипаттерн: использование SELECT * в продакшене

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
9,810
Реакции
1,556
Credits
34,852
Антипаттерн: использование SELECT * в продакшене
Кажется безобидным, правда? Особенно на этапе прототипирования. Но как только ваш запрос с SELECT * уходит в прод, начинаются проблемы:

Почему это плохо:
– Избыточные данные. Вы тянете всё, включая ненужные поля. Это бьёт по сети, памяти и CPU.
– Ломкость кода. Добавили колонку в таблицу — и, внезапно, старый код падает, потому что ожидал другую структуру.
– Плохая читаемость. Непонятно, какие поля реально нужны. Это мешает отладке и сопровождению.
– Невозможно использовать covering index — индекс по нужным колонкам не спасёт, если вы вытаскиваете всё подряд.

Как правильно:
Явно указывайте нужные поля:
SQL:
SELECT id, name, created_at FROM users;

Работаете с ORM — настраивайте выборку полей в select() или .only() (в зависимости от фреймворка).
В аналитике? Даже при джойнах и CTE — указывайте, что реально используете.

Запомни: чем меньше данных ты запрашиваешь — тем быстрее и стабильнее работает твой код.