Повышает ли выбор конкретных значений из оператора SQL эффективность по сравнению с «SELECT *»? - PullRequest
5 голосов
/ 13 сентября 2011

Этот вопрос только что пришел мне в голову, и я не могу на него ответить.

Допустим, вы разрабатываете страницу новостей для веб-сайта.В вашей таблице вы должны иметь следующие поля:

ID, название, тема, содержание, время, автор, ключевые слова

На реальной странице, которую увидит пользовательВы можете захотеть отобразить только следующее:

Заголовок, Содержимое, Ключевые слова

Теперь, когда вы приступите к написанию оператора SQL, было бы лучше написатьэто так:

SELECT Title, Content, Keywords FROM newstable;

Или так:

SELECT * FROM newstable;

Я всегда думал, что использование первого примера будет гораздо более эффективным и быстрым в использовании.Тем не менее, я теперь думаю, что может быть быстрее и проще просто использовать оператор select all.

В любом случае правильно, или действительно ли важно, как они написаны?

Ответы [ 4 ]

13 голосов
/ 13 сентября 2011

Да, это важно для производительности и по другим причинам.

  • Когда вы выбираете только нужные вам столбцы, меньше данных должно быть возвращено.Это означает меньшее время, потянув его с жесткого диска и отправив по проводам.
  • Возможно, что выбранные вами столбцы могут быть полностью удовлетворены с помощью индекса покрытия , который может сделатьзапрос во много раз быстрее
  • Указывая имена столбцов, вы документируете, какие данные вы используете в своем коде.Это очень полезно, когда вы возвращаетесь для обслуживания.
  • Не используя *, вы не рискуете сломать код при переименовании, добавлении или удалении столбцов.Если вы явно указали имена столбцов, вы получите ошибку времени выполнения запроса, а не новый результат, который слепо передается в ваш код, где кто знает, что произойдет.
4 голосов
/ 13 сентября 2011

Я предлагаю наилучшую практику - явно записывать столбцы.

Прежде всего, это сведет к минимуму количество данных, возвращаемых только к тому, что вы запрашиваете.

затем он удаляет возможные ошибки регрессии, если кто-то добавляет столбец в базу данных.

также, это не займет много времени.

наконец, у вас почти наверняка будет порядок по предложениям, это может быть удовлетворено только данными из индекса.

3 голосов
/ 13 сентября 2011

В дополнение к соображениям производительности (возвращен меньший набор результатов и возможность извлечения только индекса), возвращение в код приложения известного числа именованных столбцов в указанном порядке делает этот код более надежным - нет никаких шансов, что вы это сделаете случайно закодируйте любую зависимость от текущего определения таблицы.

1 голос
/ 13 сентября 2011

Да, это важно для производительности.Кроме того, читаемость лучше, тогда вы точно знаете, какие данные вы запрашиваете.

Вы должны указать столбцы данных, которые вам нужны, если они вам не нужны, зачем их тянуть.Вы бы просто возвращали ненужные данные

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...