Configurei uma tabela com 4000 linhas e 10 colunas com 10 caracteres cada e fiz um teste de desempenho simples usando a seguinte abordagem (
RealTimeCounter
é uma classe que mede o tempo real entre start()
e stop()
):List<String> myResult = new ArrayList<>();
ResultSet rs = s.executeQuery("SELECT * FROM Performance");
RealTimeCounter rtc = new RealTimeCounter();
rtc.start();
while(rs.next()) {
myResult.add(rs.getString(1));
}
rtc.stop();
System.out.println(rtc);
Resultados:
- Tamanho de busca padrão:o tempo de execução é de aprox. 20 segundos
- fetch size =100:o tempo de execução é de aproximadamente 2,2 segundos
- fetch size =500:o tempo de execução é de aproximadamente 450 ms
- fetch size =2000:o tempo de execução é de aproximadamente 120 ms
- fetch size =4000:o tempo de execução é de aproximadamente 50 ms
- fetch size =4001:o tempo de execução é de aproximadamente 10 ms (!!)
Portanto, o tamanho da busca não têm um impacto significativo na velocidade de execução.
Observe que, por outro lado, o tamanho da busca tem algum impacto no consumo de memória. Curiosamente, uma análise rápida usando
Runtime.getRuntime().freeMemory();
antes e depois do código acima mostrou que o impacto é muito menor do que eu esperaria. Os números que consegui são:- Tamanho de busca padrão:665k
- tamanho da busca =100:665k
- tamanho da busca =500:665k
- tamanho da busca =2000:743k
- tamanho da busca =4000:821k
- tamanho da busca =4001:861k