Что быстрее SELECT * или SELECT `field`, когда требуется только` field` - PullRequest
3 голосов
/ 17 ноября 2010

Я не хочу здесь предполагать, я был укушен / доказал, что ошибался раньше.

Любая помощь будет оценена

Ответы [ 7 ]

15 голосов
/ 17 ноября 2010

Поле SELECT быстрее, чем выберите *.

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

5 голосов
/ 17 ноября 2010

В дополнение к ответу @ AntionoP, еще одно преимущество использования SELECT field заключается в том, что если поле проиндексировано, MySQL может возвращать значение непосредственно из индекса, без необходимости искать строку данных для получения результата.

4 голосов
/ 17 ноября 2010
Говорят, что

Select * медленнее, чем select <field list>, потому что * требуется дополнительный поиск для получения всех столбцов.
Кроме того, если в этой таблице содержится больше столбцов (которые вас не интересуют), зачем получатьих только игнорировать?

2 голосов
/ 17 ноября 2010
2 голосов
/ 17 ноября 2010

Выбрать * извлечет все столбцы, которые могут быть очень большими, особенно если у вас есть BLOB-объекты. Золотое правило - выбирать нужные поля.

1 голос
/ 17 ноября 2010

При использовании SELECT * во вложенном запросе иногда оптимизатор запросов удаляет поля, которые вы не используете в последующих запросах. Так что в этом случае это не имеет значения. Но доверяете ли вы оптимизатору запросов MySQL? Единственный способ узнать наверняка, если SELECT * не добавляет ненужные поля в план запроса, - это напрямую сравнить оба плана запроса, выдав их с помощью EXPLAIN (..query..).

Тем не менее, самый простой способ быть действительно уверенным - просто не использовать SELECT * в рабочих запросах.

1 голос
/ 17 ноября 2010

Поскольку вы упоминаете mysql, я только что проверил, что "поле SELECT" является более быстрым Почему бы вам просто не проверить это самостоятельно?

В Linux:

time (echo "SELECT * FROM table" | mysql -u username --password=passwd database > /dev/null)

time (echo "SELECT field FROM table" | mysql -u username --password=passwd database > /dev/null)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...