Pular para o conteúdo
  • Este tópico contém 3 respostas, 3 vozes e foi atualizado pela última vez 16 anos atrás por hudsona.
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #93107
    facc
    Participante

      Boa tarde

      Tenho esse SELECT

      SELECT NROSORTE, SERIESORTEIO, LOJA, CODCLIENTE,
      TO_CHAR(DATANRSORTE, 'DD/MM/YYYY') AS DATA, CPF,
      NOMCLI, TELCLI AS TELEFONE FROM CYBELAR_NROSORTE
      WHERE NROSORTE IN (SELECT MIN(NROSORTE)
      FROM CYBELAR_NROSORTE
      WHERE NROSORTE >= :NumSorte
      AND EXTRACT(MONTH FROM MES_ANO) = :MesSorte
      AND EXTRACT(YEAR FROM MES_ANO) = :AnoSorte
      AND CPF IS NOT NULL
      GROUP BY MES_ANO)
      AND EXTRACT(MONTH FROM MES_ANO) = :MesSorte
      AND EXTRACT(YEAR FROM MES_ANO) = :AnoSorte
      AND FLGUSO = 1

      Mas notei que está dendo uma demora significativa na busca, seria possivel melhorar?

      Breve explicação do Select
      Esse Select serve para me trazer os dados do ganhador de um sorteio através da Loteria da Caixa, caso ele não encontre o ganhador do número sorteado, busca o próximo número.

      #93116
      fsitja
      Participante

        Vou te dar um palpite abaixo, mas não tem como eu saber se atende você porque não tenho como testá-la.

        Se você puder postar create table e inserts para testar o SQL o negócio se resolve muito mais fácil.


        SELECT nrosorte, seriesorteio, loja, codcliente, to_char(datanrsorte, 'DD/MM/YYYY') AS data, cpf, nomcli, telcli AS telefone
        FROM (SELECT row_number() over(PARTITION BY mes_ano ORDER BY nrosorte) rn, c.*
        FROM cybelar_nrosorte c
        WHERE nrosorte >= :numsorte
        AND extract(MONTH FROM mes_ano) = :messorte
        AND extract(YEAR FROM mes_ano) = :anosorte
        AND cpf IS NOT NULL)
        WHERE rn = 1 AND flguso = 1

        O espaço para melhoria está em fazer só um scan na tabela, contra 2 na query inicial.

        Pode existir 2 registros iguais, um com flguso = 1 e outro com flguso != 1?
        Se não puder dá para jogar o filtro para a query interna, na in-line view, e melhorar mais o desempenho.

        #93118
        facc
        Participante

          O flguso é apenas uma flag que diz se o número foi vendido ou não.

          Irei testar essa SQL que me passou, tendo o resultado eu volto a postar.

          Muito Obrigado.

          #93125
          hudsona
          Participante

            Em performance de query e afins não tem pra ninguém aqui no gpo o fsitja é o cara …

            Abraços!!

          Visualizando 4 posts - 1 até 4 (de 4 do total)
          • Você deve fazer login para responder a este tópico.