2-3 минуты это слишком долго, это означает, что ваша база данных не оптимизирована. Вы должны сделать правильные индексы для ваших таблиц, должны проанализировать ваши запросы и в соответствии с этим создать индексы для таблиц.
Также вы можете создать временное представление, которое будет содержать данные ваших самых частых запросов. Обновляйте его один раз в месяц или каждое большое обновление ваших данных в БД.
Создание задачи cron, которая будет выполняться один раз в месяц для воссозданного обновленного представления. Затем выполните запросы из этого сгенерированного представления.
Также вы можете подумать о репликации, если есть много запросов select, попробуйте разделить их между несколькими серверами, чтобы уменьшить нагрузку.