Действительно ли быстрее использовать «SELECT один, два, три» вместо «SELECT *» в SQL-запросе? - PullRequest
0 голосов
/ 01 января 2011

Я помню, я читал об этом один раз. Действительно ли быстрее составить список всех нужных столбцов вместо простого использования *, даже если нужны все столбцы?

Спасибо, Марти Лайн

Ответы [ 5 ]

2 голосов
/ 01 января 2011

Я никогда, никогда не видел, чтобы спор о select-column-list и select * касался производительности запроса, когда результаты абсолютно одинаковы.

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

1 голос
/ 01 января 2011

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

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

Также перечисление полей означает, что они возвращаются в указанном порядке. Если вы измените порядок полей в таблице, запрос, использующий *, также изменит порядок, в котором возвращаются поля, что может вызвать проблемы в вашем коде. Например, поля BLOB-объектов (например, текст) должны быть извлечены в том порядке, в котором они возвращаются, или значения отбрасываются.

1 голос
/ 01 января 2011

Это зависит. Если вы выбираете только 3 столбца, тогда как в ваших таблицах 100 столбцов. Чем быстрее.

Если вы все равно выберете все столбцы, тогда это просто другая запись.

0 голосов
/ 01 января 2011

Реальная разница в производительности возникает тогда, когда все выбранные вами столбцы доступны через индекс. В этом случае MySQL (и несколько других СУБД) будут выполнять «выбор только по индексу», что может быть на лот быстрее, чем выбор по индексу из самой таблицы.

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

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

0 голосов
/ 01 января 2011

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

Это может привести либо к более сложному коду, либо к значительному замедлению (если в цикле есть поиск строк).

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