Должен ли я использовать более ограниченный запрос SQL или обрабатывать набор результатов в коде? - PullRequest
0 голосов
/ 10 ноября 2011

Я довольно новый PHP-разработчик, но у меня есть некоторый хороший опыт работы с T-SQL, поэтому я более чем способен создать несколько хороших SQL-запросов. Я создаю приложение PHP и сталкивался с этой проблемой несколько раз.

Когда я сталкиваюсь с проблемой, когда мне нужно извлечь данные из базы данных MySQL и обработать вывод через PHP, я должен просто "*" вывести весь набор результатов и выбрать то, что мне нужно через PHP? ИМО имеет больше смысла вкладывать в SQL как можно больше работы, но я не знаю.

Что касается эффективности и «наилучшей практики», что в целом является лучшим; полагаться на MySQL, чтобы выполнить большую часть работы и позволить PHP получить вывод или позволить PHP выполнять большую часть работы?

Ответы [ 5 ]

1 голос
/ 10 ноября 2011

Обычно вы никогда не должны использовать подстановочный знак, чтобы захватить все столбцы.Намного лучше получать только те столбцы, которые вам интересны.Это влияет на:

  • Производительность: меньше накладных расходов только за счет извлечения и извлечения необходимых данных
  • Сопровождаемость: гораздо более очевидно, что ваш запрос извлекает.То есть, если вы добавите дополнительные столбцы в свою структуру, вы можете получить данные, которые изначально не ожидали.
0 голосов
/ 16 мая 2014

По моему опыту, время доступа к сбору * запроса или запроса конкретного поля уменьшается по сравнению с общим временем запроса, по крайней мере, если это происходит через Интернет.

IE в моем тестировании с веб-сайтами, размещенными как в США, так и за рубежом, я обычно вижу, что разница между select fld, fld, fld и select * незначительна, если у вас большие строки таблицы и много строк.

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

В настоящее время я являюсь членом команды, работающей над проектами HUGE C #, WCF, WPF, SQL, и везде они использовали «лучшие практики», и у нас огромный беспорядок. В некоторых случаях было потрачено столько усилий, чтобы следовать передовой практике, что в результате было гораздо больше работы по ее поддержанию. У нас есть интерфейсы от bazillions, а также обертки, адаптеры, Unity и т. Д. Сейчас, чтобы сделать одно небольшое изменение, оно затрагивает 15-20 файлов. Я понимаю, что это немного не по теме, но не следуйте слепо передовой практике только потому, что она есть.

0 голосов
/ 10 ноября 2011

Как правило, рекомендуется возвращать определенные столбцы.Производительность не является большой проблемой, если только вы не имеете дело с таблицами, которые содержат большие двоичные объекты (также подумайте, может ли таблица иметь в будущем), но вам может быть проще иметь дело с меньшими возвращаемыми объектами.

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

0 голосов
/ 10 ноября 2011

SQL почти всегда дает лучшую производительность по сравнению с PHP, но на самом деле это зависит от выполняемого запроса. Чем сложнее это, тем более вероятно, что SQL будет лучшим ответом. SQL был основан на «быстром получении нужных данных», тогда как PHP был построен на языке сценариев общего назначения.

0 голосов
/ 10 ноября 2011

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

...