Oi Rafael, tudo bem? Essa é uma pergunta relativamente difícil de responder sem estar inserido no cenário.
Alguns pontos podem ser:
- Queries que carregam mais dados do que precisam, podem ser um pouco que pode prejudicar essa performance.
- A forma como a gente escreve as queries também pode gerar problemas de performance.
- Otimizacoes do proprio banco podem impactar: indices, tabelas normalizadas, etc.
- Voce pode tentar paginar os dados, trazer em partes.
Quando você diz de 2 a 20 minutos, isso é um range muito grande de intervalo.Uma coisa que você pode fazer pra reduzir esse tempo é quebrar esse request de dados em mais partes. Estou considerando que é um request só que traz tudo. Se você quebra esse request em 3 ou 4, você provavelmente consegue paralelizar os processos e ganhar um tempo ai.
Outra coisa que pode ajudar são otimizações em cima do servidor web em si, gzip habilitado, etc.
Eu não sei como está o seu ambiente, então preciso ser bem genérico. Espero ter ajudado!