По моему мнению, бессмысленно иметь запросы, которые возвращают 3 миллиона записей. Что бы вы сделали с ними? Нет смысла представлять их пользователю, и если вы хотите выполнить некоторые вычисления, лучше выполнить несколько запросов, которые возвращают значительно меньше записей.
Использование LIMIT является одним из решений, но лучшим решением будет реструктуризация базы данных и приложения, чтобы вы могли получать «более умные» запросы, которые не возвращают все за один раз. Например, вы можете вернуть записи на основе столбца даты. Таким образом, вы можете получить самые последние из них.