Использование * в ЗАПРОСЕ SELECT [дубликат]

5
задан Community 23 May 2017 в 12:07
поделиться

7 ответов

Обычно считается хорошей практикой получать только то, что необходимо. Особенно, если сервер базы данных не находится на том же компьютере, выборка всей строки приведет к более медленным запросам, потому что есть больше данных для передачи по сети на машину-получатель. Поэтому, если полная строка похожа на 100 КБ данных, и вам нужен только идентификатор, который намного меньше, вы, конечно, получите более быстрые результаты.

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

10
ответ дан 18 December 2019 в 07:53
поделиться

«Преждевременная оптимизация - корень всех зол». Дональд Кнут.

Никогда не задавайте вопросов типа Будет ли прирост производительности? . Но задайте только вопрос типа «У меня есть определенное узкое место. Как я могу его устранить?»

В 99% наших приложений это «улучшение» было бы нежелательным. Как и многие другие улучшения, основанные на мечтах , а не на профилировании и реальных потребностях.

4
ответ дан 18 December 2019 в 07:53
поделиться

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

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

Единственным возможным недостатком является увеличение числа отдельных операторов SQL, которые сервер должен обрабатывать (и более сложный код на вашей стороне).

1
ответ дан 18 December 2019 в 07:53
поделиться

Нет - это повлияет на производительность, но до тех пор, пока в схеме нет BLOB / CLOB, им можно будет пренебречь (если вы не обращаетесь к базе данных через модем со скоростью 300 бод) - большая часть работы выполняется база данных определяет строки, соответствующие предложению WHERE, однако это (ИМХО) плохая практика программирования - использовать SELECT *

C.

1
ответ дан 18 December 2019 в 07:53
поделиться

Да. Получайте только те столбцы, которые вам нужны. Это не только повысит производительность, но и предотвратит случайное нарушение кода. Рассмотрим этот запрос:

SELECT * FROM tabA JOIN tabB on ... ORDER BY colX

Этот запрос работает сегодня, когда только tabA имеет colX, но если вы измените схему и добавите colX в tabB, запрос завершится.

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

-Krip

1
ответ дан 18 December 2019 в 07:53
поделиться

Да. Если вы получаете больше данных, чем вам нужно, их нужно читать с диска, передавать между MySQL и PHP и т. Д., Что, вероятно, займет больше времени.

1
ответ дан 18 December 2019 в 07:53
поделиться

Будет ли повышение производительности, если я буду использовать запросы, в которых вместо этого явно указаны названия столбцов {{1 }} из * ? - ДА

2
ответ дан 18 December 2019 в 07:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: