Otimizando query no Oracle 11g

2 respostas
Ironlynx

Tenho uma consulta simples que uso para exibir dados do BD num gráfico de barras do JFreechart:

consulta="SELECT "+DescEixoX+",COUNT("+DescEixoX+") FROM "+nome_tabela+" GROUP BY "+DescEixoX+" HAVING COUNT("+DescEixoX+") >='"+minimo+"' AND COUNT("+DescEixoX+") <='"+maximo+"' ORDER BY COUNT("+DescEixoX+")";
Onde DescEixoX é o campo selecionado numa combo na interface do usuário, com minimo e maximo sendo valores digitado pelo usuário.
Até aí tudo bem, sem problemas o gráfico é gerado.
Só que as vezes, eu quero saber a fundo os registros que estão contidos nesse gráfico, aí faço:

String query_interna="SELECT "+DescEixoX+" FROM "+nome_tabela+" GROUP BY "+DescEixoX+" HAVING COUNT("+DescEixoX+") BETWEEN '"+minimo+"' AND '"+maximo+"' "; atualizar_tabela="SELECT * FROM "+nome_tabela+" WHERE "+DescEixoX+" IN ("+query_interna+")";

Funcionava OK, quando o sistema tinha 20,30 ou 40 mil linhas.Com 500mil, trava direto, mesmo que só tenham 10 registros no retorno da consulta.Como otimizar essa contagem sem travar?

2 Respostas

pmlm

Ignorando que isso pode ser facilmente alvo de SQL Injection e concentrando apenas na parte de SQL, eu diria que criar índices nos campos que podem ser utilizados em “DescEixoX” é um bom começo.

Ironlynx

É Swing, e protótipo monousuário, sem problemas de SQL injection.Ter o banco na mesma máquina já seria um problema beeem maior do que SQL injection…Para a web a abordagem é outra.

Desconfiei que não poderia estar dando problemas com tão poucos registros(ainda que 10X o que tinha) e descobri uma “sujeira” de dados acumulados e tabelas não usadas anteriormente.Limpei tudo e a coisa é outra.

Criado 6 de maio de 2015
Ultima resposta 8 de mai. de 2015
Respostas 2
Participantes 2