SELECT FIL.CODFIL LOJA,
FIL.CIDADE,
TO_CHAR(NRO.DATANRSORTE, 'DD/MM/YYYY') DATAVENDA,
COUNT(NRO.NROSORTE) CARTELAS
FROM CYBELAR_NROSORTE NRO, CAD_FILIAL FIL
WHERE NRO.FLGUSO = 1
AND NRO.NOMCLI IS NOT NULL
AND NRO.LOJA = FIL.CODFIL
AND TO_CHAR(NRO.DATANRSORTE, 'MMYYYY') = <mês_ano>
AND NRO.LOJA = <numero da loja>
GROUP BY FIL.CODFIL, FIL.CIDADE, TO_CHAR(NRO.DATANRSORTE, 'DD/MM/YYYY')
ORDER BY LOJA, DATAVENDA
Melhorar a performance desse Select
-
- Rank: Analista Pleno
- Mensagens: 104
- Registrado em: Qua, 27 Mai 2009 2:37 pm
- Localização: Cerquilho / SP
Bom dia, como poderia melhorar a performance desse select?
-
- Moderador
- Mensagens: 1396
- Registrado em: Sex, 01 Fev 2008 2:06 pm
- Localização: Rio de Janeiro - RJ
- Contato:
desses campos quais são indices ?
eu tenho comigo o mito de que o join deve ser o primeiro item do where..
mas não sei se isso realmente otimiza
NRO.FLGUSO
NRO.NOMCLI
NRO.LOJA
FIL.CODFIL
NRO.DATANRSORTE
NRO.LOJA
DATAVENDA
eu tenho comigo o mito de que o join deve ser o primeiro item do where..
mas não sei se isso realmente otimiza
...
WHERE NRO.LOJA = FIL.CODFIL
AND NRO.NOMCLI IS NOT NULL
AND NRO.FLGUSO = 1
AND TO_CHAR(NRO.DATANRSORTE, 'MMYYYY') = <mês_ano>
AND NRO.LOJA = <numero da loja>
GROUP BY FIL.CODFIL, FIL.CIDADE, TO_CHAR(NRO.DATANRSORTE, 'DD/MM/YYYY')
ORDER BY LOJA, DATAVENDA
Poste o explain plan aí... Qual a versão do teu Oracle?
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Isso aqui está péssimo:
Poderia ser assim:
Dessa forma não precisa usar função no campo.
AND TO_CHAR(NRO.DATANRSORTE, 'MMYYYY') = <mês_ano>]
AND NRO.DATANRSORTE >= trunc( p_data, 'MM')
AND NRO.DATANRSORTE < trunc( add_months(p_data,1), 'MM')
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Isso só é valido quando o otimizador está configurado para REGRA (RBO - rule based optimizer). Mas isso "saiu de linha" depois do oracle 9i, e o Cost Based Optimizer passou a ser padrão. (CBO). Daí a única coisa que importa é que tenha estatísticas atualizadas, histogramas, etc.victorhugomuniz escreveu:eu tenho comigo o mito de que o join deve ser o primeiro item do where..
mas não sei se isso realmente otimiza
-
- Moderador
- Mensagens: 1396
- Registrado em: Sex, 01 Fev 2008 2:06 pm
- Localização: Rio de Janeiro - RJ
- Contato:
valeu pela explicação big boss..dr_gori escreveu:Isso só é valido quando o otimizador está configurado para REGRA (RBO - rule based optimizer). Mas isso "saiu de linha" depois do oracle 9i, e o Cost Based Optimizer passou a ser padrão. (CBO). Daí a única coisa que importa é que tenha estatísticas atualizadas, histogramas, etc.victorhugomuniz escreveu:eu tenho comigo o mito de que o join deve ser o primeiro item do where..
mas não sei se isso realmente otimiza
-
- Rank: Analista Pleno
- Mensagens: 104
- Registrado em: Qua, 27 Mai 2009 2:37 pm
- Localização: Cerquilho / SP
Eu alterei a linha, mas está dando um erro
Dá o erro ORA-00932: inconsistent datatypes: expected DATE got NUMBER no sinal >=
AND NRO.DATANRSORTE >= trunc('01/09/2010', 'MM')
and NRO.DATANRSORTE < trunc(Add_months('01/09/2010', 1), 'MM')
-
- Moderador
- Mensagens: 1396
- Registrado em: Sex, 01 Fev 2008 2:06 pm
- Localização: Rio de Janeiro - RJ
- Contato:
tira
coloca
trunc('01/09/2010', 'MM')
coloca
to_char(to_date('01/09/2010'), 'MM')
-
- Rank: Analista Pleno
- Mensagens: 104
- Registrado em: Qua, 27 Mai 2009 2:37 pm
- Localização: Cerquilho / SP
Muito obrigado a todos
Melhorou significavelmente a performance do select alterando de
para
antes era executado na casa dos minutos, agora passou a ser segundos!
Melhorou significavelmente a performance do select alterando de
AND TO_CHAR(NRO.DATANRSORTE, 'MMYYYY') = <mês_ano>]
AND NRO.DATANRSORTE >= trunc(to_date('01/09/2010'), 'MM')
and NRO.DATANRSORTE < trunc(Add_months('01/09/2010', 1), 'MM')
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
SHOW!
No caso que eu postei, eu estava considerando "p_data" como um tipo DATA. Por isso que deu erro quando você substituiu pra '01/09/2010' --> que é um string!
No caso que eu postei, eu estava considerando "p_data" como um tipo DATA. Por isso que deu erro quando você substituiu pra '01/09/2010' --> que é um string!
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Majestic-12 [Bot] e 31 visitantes