Pode ser que seja algum problema na consulta, verifique os custos das consultas.
Mas de qualquer forma, por que você não faz isso em um processo a parte usando filas ou estratégia similar? Depois de gerados os arquivos, você notifica o usuário ou manda por e-mail.
Fazer isso diretamente na requisição do usuário é loucura, vai acabar com o desempenho do sistema.