Обычно считается хорошей практикой получать только то, что необходимо. Особенно, если сервер базы данных не находится на том же компьютере, выборка всей строки приведет к более медленным запросам, потому что есть больше данных для передачи по сети на машину-получатель. Поэтому, если полная строка похожа на 100 КБ данных, и вам нужен только идентификатор, который намного меньше, вы, конечно, получите более быстрые результаты.
В качестве общего совета по оптимизации запросов используйте оператор EXPLAIN , чтобы узнать, насколько дорогостоящим будет запрос.
«Преждевременная оптимизация - корень всех зол». Дональд Кнут.
Никогда не задавайте вопросов типа Будет ли прирост производительности?
. Но задайте только вопрос типа «У меня есть определенное узкое место. Как я могу его устранить?»
В 99% наших приложений это «улучшение» было бы нежелательным. Как и многие другие улучшения, основанные на мечтах , а не на профилировании и реальных потребностях.
Если и насколько вы выиграете, зависит от случая, но, по крайней мере, для случаев, когда вам нужен только столбец id, вам следует исправить SQL.
В дополнение к уменьшенному сетевому трафику (отправке бесполезных данных) база данных может получить доступ к нескольким столбцам, которые вам действительно нужны, просто с помощью индексов, без доступа к таблице вообще. Это бы сильно ускорило процесс.
Единственным возможным недостатком является увеличение числа отдельных операторов SQL, которые сервер должен обрабатывать (и более сложный код на вашей стороне).
Нет - это повлияет на производительность, но до тех пор, пока в схеме нет BLOB / CLOB, им можно будет пренебречь (если вы не обращаетесь к базе данных через модем со скоростью 300 бод) - большая часть работы выполняется база данных определяет строки, соответствующие предложению WHERE, однако это (ИМХО) плохая практика программирования - использовать SELECT *
C.
Да. Получайте только те столбцы, которые вам нужны. Это не только повысит производительность, но и предотвратит случайное нарушение кода. Рассмотрим этот запрос:
SELECT * FROM tabA JOIN tabB on ... ORDER BY colX
Этот запрос работает сегодня, когда только tabA имеет colX, но если вы измените схему и добавите colX в tabB, запрос завершится.
Конечно, использование псевдонимов таблиц для всех полей также поможет предотвратить поломку.
-Krip
Да. Если вы получаете больше данных, чем вам нужно, их нужно читать с диска, передавать между MySQL и PHP и т. Д., Что, вероятно, займет больше времени.
Будет ли повышение производительности, если я буду использовать запросы, в которых вместо этого явно указаны названия столбцов {{1 }} из * ? - ДА