Performace na busca de Dados com ResultSet

6 respostas
E

Bom Dia a Todos,

Gostaria de saber o quão significativo é a diferença de performace quando pego o dado do resultSet com o número da coluna do select ou com a descrição da coluna no caso de um select * from.

Ex:

Connection con = null;
ResultSet rs = null;
PreparedStatement ps = null;

ps = con.prepareStatement("SELECT  * FROM blablabla");
rs = ps.executeQuery();
if(rs.next()){
    System.println(rs.getString("descricao"));
}

ou

Connection con = null;
ResultSet rs = null;
PreparedStatement ps = null;

ps = con.prepareStatement("SELECT id, descricao FROM blablabla");
rs = ps.executeQuery();
if(rs.next()){
    System.println(rs.getString(2));
}

A melhor utilização do primeiro caso seria quando quero retornar muitos dados no select e a melhor utilização do segundo seria quando quero retornar poucos dados?
Obs: busquei no forum e não encontrei nada referente a esse assunto, mas se o mesmo já existir passe o link por gentileza.

Obrigado a todos!

6 Respostas

E

A diferença entre usar o getString (int) e o getString (String) é virtualmente irrisória. Portanto, sempre prefira usar o getString que recebe o nome da coluna, a menos que você não tenha esse nome por algum motivo. Em particular, exceto em alguns casos isolados, não use SELECT * em código SQL dentro de seu programa; liste apenas os campos necessários.

E

Sim, é justamente essa alteração que estão fazendo em meus códigos. A partir disso surgiu essa dúvida se existe diferença de performace buscando por int ou String. Então se efetuar essa busca:

ps = con.prepareStatement("SELECT  id, nome, cpf, rg ");

…não importa se for buscar por getInt(1), getString(“nome”), getLong(3), getLong(“rg”) respectivamente por exemplo?

nel

EduardoKanno:
Sim, é justamente essa alteração que estão fazendo em meus códigos. A partir disso surgiu essa dúvida se existe diferença de performace buscando por int ou String. Então se efetuar essa busca:

ps = con.prepareStatement("SELECT  id, nome, cpf, rg ");

…não importa se for buscar por getInt(1), getString(“nome”), getLong(3), getLong(“rg”) respectivamente por exemplo?

Em termos de perfomance não. A diferença é que se tu alterar a ordem das colunas no seu banco e estiver usando um getString(1) da vida, você terá de alterar a ordem no seu código também. Por isso, eu tenho por costume sempre buscar as colunas pelos seus respectivos nomes, pois mantendo o nome, a ordem delas não me preocupa.

E

nel:

Em termos de perfomance não. A diferença é que se tu alterar a ordem das colunas no seu banco e estiver usando um getString(1) da vida, você terá de alterar a ordem no seu código também. Por isso, eu tenho por costume sempre buscar as colunas pelos seus respectivos nomes, pois mantendo o nome, a ordem delas não me preocupa.

Mas teoricamente quando tu usa int pra buscar o campo, tu não obrigatoriamente deveria usar o nome do campo no select efetuado ?? Se sim a ordem dos campos também não importaria, correto ?

nel

EduardoKanno:
nel:

Em termos de perfomance não. A diferença é que se tu alterar a ordem das colunas no seu banco e estiver usando um getString(1) da vida, você terá de alterar a ordem no seu código também. Por isso, eu tenho por costume sempre buscar as colunas pelos seus respectivos nomes, pois mantendo o nome, a ordem delas não me preocupa.

Mas teoricamente quando tu usa int pra buscar o campo, tu não obrigatoriamente deveria usar o nome do campo no select efetuado ?? Se sim a ordem dos campos também não importaria, correto ?

Sim, mas o inteiro representa a posição do campo, se tu usou 4 campos no select o 1 é justamente o primeiro, entende ?
O ideal é usar o String.

E

OKay. Entedi !

Obrigado pelas respostas entanglement e nel

Criado 10 de novembro de 2011
Ultima resposta 10 de nov. de 2011
Respostas 6
Participantes 3