Почему использование SELECT * в SQL считается вредным?

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Применение SELECT * не рекомендуется, поскольку это может привести к снижению скорости выполнения запросов в случае работы с широкими таблицами и вызвать проблемы при изменении схемы базы данных. Такой подход неэффективен для сети и сервера баз данных, особенно если обрабатываются данные, которые в результате не будут использоваться. Поэтому всегда явно указывайте столбцы, которые нужны непосредственно для вашего запроса. Это обеспечит высокую производительность, укрепит безопасность и гарантирует совместимость с будущими изменениями кода.

Не рекомендуется:

SQL
Скопировать код
-- У меня много свободного времени. Давайте извлечем всё! 😉
SELECT * FROM users;

Рекомендуется:

SQL
Скопировать код
-- Возвращаем только необходимое, выбираем только то, что нужно! 😎
SELECT id, username, email FROM users;

Подобный подход позволяет минимизировать объем передаваемых данных и поддерживать высокую производительность даже при изменениях в структуре базы данных.

Кинга Идем в IT: пошаговый план для смены профессии

Плохие последствия использования SELECT *

Несмотря на кажущуюся необязательность, непродуманное использование команды SELECT * может привести к серьезным проблемам:

  1. Снижение производительности: Извлечение избыточных столбцов замедляет процесс выполнения запросов.
  2. Проблемы с поддержкой: Неявная зависимость от структуры базы данных создает риск нежелательных последствий при её изменении.
  3. Нарушение индексации: SELECT * игнорирует стратегии индексации, что приводит к перегрузке базы данных.
  4. Перегрузка данных: Избыточная нагрузка на сеть и сервер вызывает неоправданное расходование ресурсов и замедление работы.
  5. Путаница в результатах запросов: Столбцы с одинаковыми именами из различных таблиц могут ввести в заблуждение.
  6. Неприятные сюрпризы: Непредсказуемые ошибки в коде могут возникнуть при изменении схемы базы данных.

Будьте безопасны: Явно указывайте столбцы

Чтобы избежать вышеперечисленных проблем, следует придерживаться определенных рекомендаций:

  • Ясно определите столбцы: Укажите требуемые данных, чтобы улучшить управление, оптимизировать трафик и подготовить код к возможным изменениям структуры данных.
  • Используйте псевдонимы: Псевдонимы и понятное именование колонок помогают облегчить поддержку кода.
  • Модульность: Создавайте запросы с учетом лёгкости внесения изменений и обеспечения безопасности типов.
  • Актуализация кода: Определение столбцов позволяет защитить ваш код от изменений в базе данных и избежать лишней работы.

Визуализация

Давайте посмотрим на пример, почему SELECT * может быть вредным:

Markdown
Скопировать код
Мега-шопинг (🚛): [Сумка👜, Шляпа🎩, Носки🧦, Микроволновка🤯, Игрушка🎠, Картина🖼, Питон🐍]

Сравним использование `SELECT *` с покупкой ВСЕГО! Вам действительно нужен питон?

Разумный покупатель выбирает только необходимое:

Markdown
Скопировать код
Осознанный шопинг: [Сумка👜, Носки🧦]

Применив `SELECT column1, column2`, вы выбираете только нужное – это поддерживает эффективность и обеспечивает безопасность.

Осознанный шопинг (🚛<->📊): Благодаря такому подходу вы экономите время и средства, избегаете лишней нагрузки и нежелательных встреч.

Лучшие практики: Избегайте SELECT *

В сложных базах данных каждый выбор имеет значение:

  • Подсчет строк: Даже простой SELECT COUNT(*) может создать узкие места в производительности некоторых систем.
  • Обработка изменений: Внезапно появившиеся в результатах непредвиденные столбцы могут усложнить код и потребовать его модификации.
  • Ad hoc запросы и отладка: SELECT * подходит для простых проверок и отладки, но только на временной основе.
  • Порядок столбцов: Будьте осторожны – изменения в порядке столбцов могут нарушить логику работы приложения, зависящего от последовательности этих столбцов.

Полезные материалы

  1. sql – Why is SELECT * considered harmful? – Stack Overflow — Подробное обсуждение причин, по которым SELECT * может быть плохой практикой.
  2. Why and How to Avoid the SQL SELECT * Statement – CodingSight — Полезные советы по тому, как избегать использования запроса SELECT *.
  3. Reevaluate the Use of SELECT in Queries – SQLShack — Размышления о том, как можно пересмотреть использование SELECT * для повышения производительности.
  4. 10+ Mistakes to Avoid When Using VBA Recordset Objects – TechRepublic — Обзор лучших практик и распространенных ошибок в проектировании баз данных с упоминанием темы SELECT *.