Быстрее запрашивать в MYSQL или использовать логику PHP - PullRequest
1 голос
/ 18 мая 2009

У меня есть страница, которая вытянет много заголовков из нескольких категорий на основе идентификатора категории.

Мне интересно, имеет ли смысл выводить все заголовки, а затем разбирать их с помощью PHP, если / ifelse, или лучше запускать несколько запросов, каждый из которых содержит заголовки из каждой категории.

Ответы [ 5 ]

8 голосов
/ 18 мая 2009

Почему бы не сделать это в одном запросе? Что-то вроде:

SELECT headline FROM headlines WHERE category_id IN (1, 2, 3, ...);

Если вы фильтруете свои заголовки в PHP, подумайте, сколько вы будете выбрасывать. Если в конечном итоге вы удалите только 10% заголовков, это будет не так важно, как если бы вы отбрасывали 90% результатов.

2 голосов
/ 19 мая 2009

На такие вопросы всегда трудно ответить, потому что ситуация определяет лучший курс. По-настоящему правильного ответа никогда не бывает, есть только лучшие способы. По моему опыту не имеет значения, пытаетесь ли вы выполнить работу в PHP или в базе данных, потому что вы всегда должны пытаться кэшировать результаты любой дорогостоящей операции, используя механизм кэширования, такой как memcached . Таким образом, вы не собираетесь тратить много времени в БД или в самом php, так как результаты будут кэшироваться и мгновенно готовы к использованию. Когда дело доходит до этого, если вы не профилируете свое приложение с помощью инструмента, подобного xDebug , то, что вы считаете узкими местами в вашей производительности, это всего лишь догадки.

0 голосов
/ 18 мая 2009

Каждая поездка в базу данных стоит вам чего-то. Возврат дополнительных данных, которые вы затем решили игнорировать, стоит вам чего-то. Так что вам почти наверняка лучше позволить базе данных выполнить ваше сокращение.

Я уверен, что можно придумать случай, когда решение о том, какие данные вам нужны, делает запрос чрезвычайно сложным и, следовательно, сложным для оптимизации базы данных, в то время как вы можете легко сделать это в своем коде. Но если мы говорим о «выберите заголовок из истории, где категория =« Спорт »», а затем «выберите заголовок из истории, где категория =« Политика »», тогда «выберите заголовок из истории, где категория =« Здоровье »,« и т. Д., Против » выберите категорию, заголовок из истории, где категории в («Здоровье», «Спорт», «Политика») ", последний явно лучше.

0 голосов
/ 18 мая 2009

MySQL уже может сделать выбор и упорядочение данных для вас. Я предлагаю быть ленивым и использовать это.

Также я бы искал (1) запрос, который извлекает сразу все категории и их заголовки. Будет ли категория ORDER BY, дата публикации или что-то еще?

0 голосов
/ 18 мая 2009

Обычно лучше не перегружать БД, потому что вы можете вызвать узкое место, если у вас много одновременных запросов.

Однако обработка вашей обработки в PHP обычно лучше, так как Apache разветвляет потоки, поскольку ему необходимо обрабатывать несколько запросов.

Как обычно, все сводится к: "Сколько там трафика?"

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