Что быстрее/лучше? SELECT * или SELECT столбец 1, столбец 2, столбец 3 и т. д.

Учитывая вашу спецификацию, которую sqlselect вы выбираете при выборе всех столбцов, на dbms данный момент небольшая разница database-structure . Однако помните, что схемы базы данных меняются. Если вы используете SELECT *, вы получите любые новые столбцы, добавленные в таблицу, даже если, по всей вероятности, ваш код не готов использовать или представлять эти новые данные. Это означает, что вы подвергаете свою систему неожиданным изменениям производительности и функциональности.

Вы можете отмахнуться от select-statement этого как от незначительной sql стоимости, но помните, что database столбцы, которые вам не нужны, все dbms равно должны быть:

  1. Чтение из базы данных
  2. Отправлено по сети
  3. Подключен к вашему процессу
  4. (для технологий типа ADO) Сохраняется в таблице данных в памяти
  5. Игнорируется и выбрасывается/собирается мусором

Пункт № 1 dbms имеет много скрытых затрат, включая database-structure устранение некоторых потенциальных database покрывающих индексов, вызывающих dbms загрузку страниц данных (и dbms перегрузку кэша сервера), возникновение dbms блокировок строк/страниц/таблиц, которых database можно было бы избежать в sql-query противном случае.

Сопоставьте database это с потенциальной экономией sql-query от указания столбцов по сравнению sql-statement с *, и единственная потенциальная dbms экономия:

  1. Программисту не нужно повторно обращаться к SQL, чтобы добавить столбцы
  2. Сетевой транспорт SQL меньше / быстрее
  3. Время разбора/проверки запросов SQL Server
  4. Кэш планов запросов SQL Server

Для пункта 1 реальность sql-syntax такова, что вы собираетесь sql-query добавить/изменить код для sql-statement использования любого нового sql-syntax столбца, который вы могли db бы добавить в любом случае, так databases что это промывка.

Для пункта sql-query 2 разницы редко бывает достаточно, чтобы database подтолкнуть вас к другому databases размеру пакета или количеству sql-select сетевых пакетов. Если вы db дойдете до того, что время database передачи операторов SQL станет sql-query преобладающей проблемой, вам, вероятно, придется dbms сначала уменьшить количество databases операторов.

Для пункта 3 НЕТ dbms экономии, так как расширение db * должно произойти в любом sql-syntax случае, что в любом случае select-statement означает обращение к схеме sql таблицы (таблиц). На самом sql-statement деле перечисление столбцов sql-statement будет стоить столько же, потому database что они должны быть проверены sql по схеме. Другими словами, это db полная стирка.

Для пункта sql 4, когда вы указываете определенные databases столбцы, ваш кеш плана запроса database может стать больше, но только если databases вы имеете дело с разными sqlselect наборами столбцов (что не select-statement то, что вы указали). В этом databases случае вам нужны разные записи sql-statement кэша, потому что вам нужны sql-statement разные планы по мере необходимости.

Итак, из-за database того, как вы определили вопрос, все dbms сводится к устойчивости проблемы dbms перед лицом возможных изменений sql схемы. Если вы записываете sqlselect эту схему в ПЗУ (это случается), то sql-syntax * вполне приемлемо.

Тем не databases менее, мой общий принцип sql заключается в том, что вы sql-syntax должны выбирать только те sql столбцы, которые вам нужны, а database-structure это означает, что иногда может db показаться, что вы запрашиваете sql-select все из них, но администраторы databases баз данных и эволюция схемы sql-select означают, что могут появиться sqlselect некоторые новые столбцы, которые database-structure могут сильно повлиять на select-statement запрос.

Мой совет: вам следует databases ВСЕГДА ВЫБИРАТЬ определенные столбцы. Помните, что вы добиваетесь sql-select успеха в том, что делаете sql-query снова и снова, поэтому просто databases выработайте привычку делать database-structure это правильно.

Если вам интересно, почему sql-select схема может измениться без dbms изменения кода, подумайте select-statement о ведении журнала аудита, датах sql-select вступления в силу/истечения sql-syntax срока действия и других подобных db вещах, которые добавляются sql-syntax администраторами баз данных dbms для систематических проблем dbms соответствия. Другим источником sqlselect закулисных изменений является dbms денормализация производительности sql-syntax в других местах системы или sql-select в пользовательских полях.

sql

database

2022-10-30T14:40:55+00:00