Ответ
Звёздочка (*) в запросе SELECT * — это специальный символ, означающий "все столбцы таблицы (или всех таблиц в JOIN)".
Пример:
-- Выбрать все столбцы из таблицы 'users'
SELECT * FROM users;
Когда это может быть оправдано:
- Ад-hoc анализ или быстрое изучение структуры таблицы.
- Запросы в консоли для разовых проверок.
Почему SELECT * считается плохой практикой в продакшене:
- Избыточность данных: Запрос получает все столбцы, включая потенциально тяжелые (BLOB, TEXT), что увеличивает нагрузку на сеть и память.
- Хрупкость кода: Структура таблицы может измениться (добавлены/удалены столбцы), что сломает логику приложения, ожидающую определенный порядок или набор полей.
- Снижение читаемости: Непонятно, какие именно данные используются.
- Проблемы с JOIN: При соединении таблиц с одинаковыми именами столбцов возникнут конфликты.
Рекомендуемая best practice — явное перечисление столбцов:
-- Хорошо: явный список
SELECT id, username, email, created_at
FROM users
WHERE is_active = TRUE;
-- Плохо: использование *
SELECT *
FROM users
WHERE is_active = TRUE;
Исключение: Можно использовать в подзапросах, где все столбцы явно нужны (например, в EXISTS), но даже там лучше перечислять хотя бы один столбец для ясности.