Preciso de dicas do pessoal mais experientes de como eu posso melhorar minhas consultas feitas pelo hibernate.
Por exemplo:Vamos supor
Tenho uma tabela com 50 campos(cadastro básico como nome,endereço, telefone e outros campos), essa tabela tem 100 registros.
Quero procurar por uma pessoa pelo nome.
Se faço assim: from Cadastro WHERE nome = ?
Vai passar pelo 50 campos dos 100 registros = 5000 campos que o hibernate passou.
Mas se faço assim: SELECT nome FROM Cadastro WHERE nome = ?
Vai passar apenas nos 50 campos nome, só que só vai me retornar os campos nomes.
Queria fazer o seguinte, que o hibernate “passasse” apenas nos campos que preciso no WHERE por exemplo, mas se encontrar resultado me retornar o objeto inteiro.O hibernate faz isso?
Ex:Faço o select pelo nome, e tem duas pessoas com esse nome, ele passou pelos 50 campos dos nomes, e depois passa pelos campos dessas duas pessoas para pegar seus valores.
Como assim passar pelos 50 campos? O que ele vai fazer é recuperar os 50 campos dos registros onde satifaz o critério de busca (where nome = ?). Isso é um comportamento padrão do SQL Ansi (select * from cadastro where nome = ?), não concorda?
Agora se você está sofrendo com a performance nesse caso, eu te daria 3 dicas:
- Crie indices no banco de dados de uma forma correta. Certamente isso irá ajudar muito na performance. Nesse seu caso, criando um indice pelo campo NOME iria ajudar.
- Dependendo do caso, ative o cache de segundo nivel do hibernate pode ajudar
- Se você tem uma operação de consulta padrão, onde os dados da tabela não mudam frequentemente, ative o cache de consulta.
Espero ter ajudado
Tabela básica com 50 campos ???
Tem coisa errada ae !
Lembra de 1ª, 2ª e 3ª forma normal lá do curso de BD ?
outra coisa, o hibernate vai “passar” pelos 50 campos ???
Tá confundindo tudo !
Coloque indice em alguns campos como nosso colega sugeriu, tipo : Nome, CPF, etc …
Estude e seja feliz.
Vimieiro
Nossa, 50?eh necessário realmente 50 campos nessa tabela ?!