SELECT * или убийца производительности
Привет, аналитики!
Было время раньше писал SELECT *, потому что так быстрее набирать. В таблице 80 колонок, а дашборду нужны только 8. Казалось безобидно — пока отчет, который раньше работал 10 секунд, не стал выполняться 45, а потом и 60, по мере роста таблицы до миллионов строк.
На маленьких таблицах разница незаметна. Но каждая лишняя колонка — это больше данных с диска, больше памяти, больше сетевого трафика и медленный запрос. Широкие таблицы с SELECT * — это безмолвный убийца производительности. На тысяче строк вы не заметите. На десяти миллионах — обязательно заметите.
В одном продакшен-отчете я заменил SELECT * на явный список колонок. Время выполнения упало с 45 секунд до 6. В таблице было 80 колонок, а дашборду нужны были всего 8: id, amount, date, customer_id, status, region, created_at и product_type. Выражусь предельно ясно. Вы в будущем — как и ваши пользователи — скажут вам за это спасибо.