Что происходит быстрее, большой объединенный запрос с большим количеством PHP или несколькими небольшими выборками с меньшим количеством PHP?

Я запускаю задачу cron, которая делает много запросов на сервере MySQL . Большая проблема заключается в том, что сервер работает очень медленно.

У меня есть относительно большой запрос с четырьмя столами слева, соединенными между ними, и 4 меньшими запросами с natural join которые также атакуют первую таблицу. Выбрав эти запросы, я обрабатываю результаты и группирую их с помощью PHP .

Я планирую как-то смешать эти 5 запросов в один большой запрос, а затем позволить PHP сделать некоторые быстрые sort() когда мне это нужно.

Мне также говорят, что запросы MySQL выполняются быстрее PHP с точки зрения фильтрации и сортировки, но я достаточно обеспокоен этим, когда говорю о наличии 7 или 8 левых объединений. Некоторые дополнительные сведения об этих запросах (которые я не могу скопировать из-за политики компании):

  • Каждая выбранная строка и поле будут посещаться хотя бы один раз.
  • Каждый запрос выполняется на основе одной основной таблицы с некоторыми таблицами «крыла».
  • Каждый запрос использует одно и то же правило GROUP BY .
  • В настоящее время код PHP разбивает некоторые вторичные запросы на несколько массивов. При использовании большого запроса он должен также сортировать результаты по нескольким параметрам.

Таким образом, из-за этих проблем и, возможно, как правило:

Что происходит быстрее, большой объединенный запрос с большим количеством PHP или несколькими небольшими выборками с меньшим количеством PHP?

Solutions Collecting From Web of "Что происходит быстрее, большой объединенный запрос с большим количеством PHP или несколькими небольшими выборками с меньшим количеством PHP?"

Как правило, чем меньше запросов, тем лучше. Есть накладные расходы на передачу запроса в MySQL, однако сложный запрос. Однако php неожиданно быстро для некоторых вещей, и если вы не используете индексы для сортировки (что кажется возможным, если вы эффективно сортируете результаты нескольких запросов, объединенных вместе), производительность рода в php может быть сопоставима или даже лучше ,

Там, где есть большая разница, вы получаете результаты одного запроса, а затем выполняете другой запрос для каждой возвращаемой строки в первом запросе. В этой ситуации довольно легко, что количество запросов выходит из строя довольно быстро, не будучи замеченным. На работе я нашел сценарий генерации меню, у которого был один запрос, чтобы получить пункты меню высокого уровня, а затем еще один запрос для каждого элемента высокого уровня, чтобы получить элементы детского меню. Это было легко переписано как объединение, но удивительной частью является разность рабочих характеристик, с тем временем, которое требуется для того, чтобы сгенерировать меню с 0,2 секунды до 0,002 секунды.

Но это случайное решение. У меня было требование вернуть некоторые значения на основе рассчитанного значения levenshtein (по существу, оценка того, как разные 2 строки). Используя пользовательскую функцию mysql, это было возможно и значительно уменьшило количество возвращенных строк, но было довольно медленным. Функция php levenshtein значительно быстрее, и оказалось более эффективным возвращать в несколько раз больше строк, а затем обрабатывать их в php для получения значения levenshtein и затем отбрасывать ненужные записи.

В описанной ситуации я подозреваю, что разница может быть незначительной. Казалось бы, вы будете делать только 4 запроса, а не более 1 сложный запрос. Однако, не видя структуры таблиц и запросы (которые, к сожалению, вы не можете предоставить), трудно быть уверенным. Возможно, было бы эффективно сделать один разумный сложный запрос, но игнорировать сортировку, где это не является строго необходимым, а затем выполнить это в php (для этого полезно использовать сопоставление с определенным пользователем).

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

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