Pular para o conteúdo

Fóruns Banco de dados Oracle Desenpenho de consultas Desenpenho de consultas

#104570
maxmcosta
Participante

    Bom, não sei se seria o correto, mas fiz dessa forma:

    SELECT lista1.valor as v1, lista2.valor as v2 from lista1, lista2
    where
    (
    lista1.ID_lista = '2170' and lista1.ID_base_lost = '31' and lista1.PERIODO BETWEEN '01/06/12' AND '01/06/12' and
    lista2.ID_lista = '2170' and lista2.ID_base_lost = '31' and lista2.PERIODO BETWEEN '01/06/12' AND '01/06/12'
    )

    Agora a consulta que demorava 35 segundo está sendo realizada com 3 segundos.

    A ideia de usar o join funcionaria apenas no caso de filtrar as três tabelas ao mesmo tempo? Vou postar abaixo de forma resumida como está o código do loop, assim se alguém tiver alguma ideia para melhorar ainda mais agradeço…


    psBase = conn.prepareCall("select id, descricao from base where subgrupo = '1.0' or subgrupo = '2.0' or subgrupo = '3.0'");
    rsBase = psBase.executeQuery();

    //loop na tabela base
    while(rsBase.next()){

    Int idListaAtual = rsBase.getString("id");

    //aki dentro executo os dois selects, no caso atual, já substitui os dois select por um só, como informado acima...

    psRealizado = conn.prepareCall("SELECT lista1.valor as v1, lista2.valor as v2 from lista1, lista2 where
    (
    lista1.ID_lista = "+idListaAtual+" and lista1.ID_base_lost = "+id_base_lost+" and lista1.PERIODO BETWEEN '01/06/12' AND '01/06/12' and
    lista2.ID_lista = "+idListaAtual+" and lista2.ID_base_lost = "+id_base_lost+" and lista2.PERIODO BETWEEN '01/06/12' AND '01/06/12'
    )");

    rsRealizado = psRealizado.executeQuery();

    //Se acho algo mando para arrais...

    if (rsRealizado.next()){
    lista1[contArray] = rsRealizado.getFloat("v1");
    lista2[contArray] = rsRealizado.getFloat("v2");
    }

    }