Лучше ли возвращать один большой запрос или несколько меньших?

Я использую MySQL для хранения данных видеоигр. У меня есть таблицы для титров, платформ, тегов, значков, отзывов, разработчиков, издателей и т.д.

Когда кто-то просматривает игру, лучше всего иметь один запрос, который возвращает все данные, связанные с игрой, или лучше использовать несколько запросов? Интуитивно, поскольку у нас есть обзоры, кажется бессмысленным включать их в один и тот же запрос, так как они должны быть разбиты на страницы. Но есть и другие ситуации, в которых я не уверен, если сломать запрос или использовать два запроса...

Меня немного беспокоит производительность, так как я теперь присоединяюсь к играм в следующих таблицах: разработчики, издатели, метатеги, значки, титры, жанры, поджанры, классификации... для захвата игровых значков (из games_badges; многие-ко-многим в таблицу игр, а многие из многих - в таблицу значков). Я могу либо сделать другое соединение, либо запустить отдельный запрос.... и я не уверен, что лучше...

Ответы

Ответ 1

Нет панацеи.

  • Всегда старайтесь получать только необходимые данные.
  • Нет ответа, лучше ли один большой или несколько небольших запросов. Каждый случай уникален и для ответа на этот вопрос вы должны профилировать свое приложение и изучать запросы EXPLAIN s

Ответ 2

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

Итак, если вы собираетесь показывать 20 игр на странице, вы можете ускорить запрос (по-прежнему используя только один запрос) с предложением LIMIT и снова запустить этот запрос позже, когда они перейдут на следующую страницу. Это или вы можете просто заставить их дождаться завершения запроса и сразу получить все данные. Одно большое ожидание или несколько маленьких ожиданий.

tl; dr использует как можно меньше запросов.

Ответ 3

Это обычно проблема с обработкой.

  • если один запрос предполагает получение тысяч записей, вызовите несколько запросов, чтобы mysql выполнил обработку (суммы и т.д.).
  • если несколько запросов включают в себя создание десятков или сотен из них, то вызовите один запрос

Очевидно, что вы всегда сталкиваетесь с обоими из них, поскольку ни один из них не является вариантом goto, если вы задаете вопрос, поэтому на самом деле выбор:

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