Oi.
Supondo que o seu código esteja muito bem implementando, fechando todos os ResultSet, PreparedStatement, Connection e usando um pool de conexões.
Pensando nesse cenário e existe uma lentidão, devemos considerar que há um tráfego de rede envolvido no processo e dependendo do tamanho de cada pacote enviado, é normal que haja uma demora superior a realizada quando a consulta é local.
Justamente pensando nisso, muitos servidores Web realizam a conexão ao banco de dados localmente, de modo que o processo ocorra de forma mais rápida. É lógico que existem outras saídas e nem vou entrar em detalhes, mas é uma observação, apenas. Acho que tu vai fazer bobagem ao fazer um dump da base de dados para a máquina local. Começa pelo fato de tu não saber o tamanho desse dump e muito menos se o seu disco rígido (do cliente) terá espaço para fazer isso. Outro ponto a ser observado, é o tempo em que o sistema levará para realizar um dump automático das informações. Se tiver 10 registro em 5 tabelas, é tranquilo. Como fica se tiver 300 mil registros em 15 tabelas?
Meu conselho é você revisar o seu código, verificar se está usando uma boa arquitetura, se está dividindo os processos em camadas, se está usando um pool de conexões adequados, senão está deixando nenhuma conexão aberta, a máquina em que está executando a aplicação e etc. O Java é excelente mas não faz milagre e há algoritmos, que por mais que você busque usar os melhores padrões de projetos em seu desenvolvimento, são por si só, demorados ou exigem um alto nível de processamento e se levarmos em conta que há influência da rede na comunicação entre os dados, isso pode aumentar de forma exponencial.