Consulta otimizada MySql Java

[size=18]Ola sou novata no mundo da programação, e estou com algumas dúvidas na aplicação que estou desenvolvendo. Trata-se de um sistema para biblioteca onde acontecem diversas consultas com bastante frequencia.Utilizo o banco de dados MySql e as principais consultas são:

consultar codigo, tipo, nome do item,nome da area, nome do autor, nome da prateleira e nome da editora da tabela acervo quando estes obedecerem a uma determinada condição.Os campos, com exeção do codigo e nome do item são chaves estrageiras referenciadas pelo id.

Consultar codigo, nome do acervo, nome do associado e data de emprestimo da tabela Emprestimos quando estes obedecerem a uma determinada regra, sendo que com exeção do codigo os demais campos são chaves estrangeiras.

Qual a melhor forma de realizar estas consultas (joins ou consultas simples), fazendo com que minha aplicação não fique lenta???
No caso de JOIN como montar os comandos SQL com tantas tabelas envolvidas???
[/size]
[color=darkblue]Desde já agradeço a colaboração[/color] :slight_smile:

Olá Soraynha!

  1. No uso do SELECT, para aumentar a performance da consulta, é importante utilizar uma chave (não necessariamente a chave estrangeira).

  2. A sintaxe do JOIN é igual, seja para duas tabelas ou para um número maior.

  3. Saber o que é melhor, usar JOIN ou várias consultas simples (SELECT sem JOIN), dependerá de quantos SELECT simples seriam necessários a mais em relação ao uso do JOIN. Como já disse no item 1, o mais importante em um SELECT é o uso de uma “boa” chave.

Eder obrigada mesmo pela resposta não querendo abusar da boa vontade você poderia resolver uma das duas consultas para que eu possa ter um exemplo mais claro, como disse sou iniciante e minha maior dificuldade é o banco de dados!!!

Soraynha.

o que você já tem/tentou fazer?

poste o script de criação das tabelas.

Já implementei esse codigo de consulta. Tenho um metodo na minha classe de conexão que recebe os campos a serem retornados e nome da tabela seguida da condição where, este metodo me retorna um resultSet que eu utilizo para manipular o resultado da consulta. Só que como vocês podem ver é algo muito amador e acredito que isso vai me trazer problemas futuramente pois este banco foi preparado para receber uma grande quande quantidade de dados.

[size=18]//Verificando qual a opção de consulta
int opConsulta=CBOpcao.getSelectedIndex();
switch(opConsulta){
case 1:
rst=(conn.executaConsulta("",“acervo where area like '%” + jTextNomeBusca.getText()+"%’"));
break;
case 2:
rst=(conn.executaConsulta("
",“acervo where assuntos like '%” + jTextNomeBusca.getText()+"%’"));
break;
case 3:
rst=(conn.executaConsulta("",“acervo where autor like '%” + jTextNomeBusca.getText()+"%’"));
break;
case 4:
rst=(conn.executaConsulta("
",“acervo where titulo like '%” + jTextNomeBusca.getText()+"%’"));
break;

}

//Passando o resultado da consulta para as variaveis
try{
while (rst.next())
{
codigo = rst.getInt(1);
idTipo=rst.getInt(2);
titulo=rst.getString(6);
idArea=rst.getInt(7);
idAutor=rst.getInt(3);
idPrateleira=rst.getInt(4);
idEditora=rst.getInt(8);

// String foto = conn.rs.getString(16);
rst1=conn.executaConsulta("*","tipoacervo where idtipoAcervo = "+idTipo );
while (rst1.next())
{
tipo=rst1.getString(2);
}rst1.close();

  rst1=conn.executaConsulta("*","area where id = "+idArea );
  while (rst1.next())
{
 area=rst1.getString(2);
  }rst1.close();

  rst1=conn.executaConsulta("*","autor where idautor = "+idAutor );
  while (rst1.next())
{
 autor=rst1.getString(2);
  }rst1.close();

  rst1=conn.executaConsulta("*","prateleira where idprateleira = "+idPrateleira );
  while (rst1.next())
{
 prateleira=rst1.getString(2);
  }rst1.close();

  rst1=conn.executaConsulta("*","editora where ideditora = "+idEditora );
  while (rst1.next())
{
 editora=rst1.getString(2);
  }rst1.close();

//Inserindo o resultado da consulta na tabela//
modelo.addRow(new Object[]{codigo,tipo,titulo,area,autor,prateleira,editora});

}//   BtnLimpar.setEnabled(true);
conn.fecharConnecção();

}catch(SQLException eS){
eS.printStackTrace();
}
}[/size]

Este é meu metodo que realiza as consultas, porem essas consultas necessitam ser feitas com frequencia em um banco de dados com um numero de registros enormes, a minha classe de conexão tem um metodo chamado executaConsulta que recebe o nome dos campos e a tabela seguida da condição (where), o que eu quero na verdade é otimizar essa consulta que é o modelo padrão das demais.

acho que você pode trocar esse monte de consulta por isso:

[code]
consulta.append(“select acervo.codigo”);
consulta.append(" , tipoacervo.nome");
consulta.append(" , area.nome");
consulta.append(" , autor.nome");
consulta.append(" , prateleira.nome");
consulta.append(" , editora.nome");
consulta.append(" from acervo");
consulta.append(" left join tipoAcervo");
consulta.append(" on tipoacervo.id = acervo.acervoId");
consulta.append(" left join area");
consulta.append(" on area.id = acervo.areaId");
consulta.append(" left join autor");
consulta.append(" on autor.id = acervo.autorId");
consulta.append(" left join prateleira");
consulta.append(" on prateleira.id = acervo.prateleiraId");
consulta.append(" left join editora");
consulta.append(" on editora.id = acervo.editoraId");
consulta.append(" where acervo.").append(campoBuscado).append(" like ‘%").append(textoBuscado).append("%’");
rst1 = conn.executaConsulta(consulta.toString());
consulta.delete(0, consulta.length());

while (rst1.next()) {
codigo=rst1.getString(1);
tipo=rst1.getString(2);
area=rst1.getString(3);
autor=rst1.getString(4);
prateleira=rst1.getString(5);
editora=rst1.getString(6);
modelo.addRow(new Object[]{codigo, tipo, titulo, area, autor, prateleira, editora});
}[/code]
uma única consulta que traz todos os dados.

se ficou dúvidas, pergunte.

Dica de quem já fez m… no passado lidando com um bando de Strings soltas e nervosas em consultas a base:
Faz um arquivinho de propriedades(um .properties, tem artigo bacana aqui no GUJ)e seja feliz. :smiley:

Ola desta vez tow passando pra dar meu muito obrigada a todos que me ajudaram implementei os codigos e ta funcionando muito bem, a galera da guj é muito maneira mesmo !!![size=18] [/size][color=violet] [/color]