Oracle Hints
-
- Rank: DBA Júnior
- Mensagens: 223
- Registrado em: Qui, 14 Dez 2006 10:45 am
- Localização: Brasília-DF
Cleber Zumba de Souza
Pessoal, queria saber de voces qual Hints voces utilizam para agilizar o resultado do select, para aumentar a performence do select.
- 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
Não existe uma receita de bolo pra isso.
Se fosse possível ter uma "regra" do tipo "sempre faça assim", a ORACLE ia automatizar e sempre colocar o hint certo. O otimizador já tenta fazer o melhor plano de execução pra consulta, mas mesmo assim, as vezes é necessario mudar a regra.
Aumentar a velocidade de um processo requer um vasto conhecimento tanto das tabelas em questão, como do funcionamento do banco de dados. Existem algumas regras básicas pra isso, como não matar índices por usar funções no campo, etc... Mas isso é apenas a PONTA DO ICEBERG.
Sugiro você ler a documentação de Tuning disponível nos manuais da ORACLE ou procurar pos apostilas/documentos que falem sobre isso, pois o assunto não é algo que se responda em forums... É bem mais amplo que isso.
Se fosse possível ter uma "regra" do tipo "sempre faça assim", a ORACLE ia automatizar e sempre colocar o hint certo. O otimizador já tenta fazer o melhor plano de execução pra consulta, mas mesmo assim, as vezes é necessario mudar a regra.
Aumentar a velocidade de um processo requer um vasto conhecimento tanto das tabelas em questão, como do funcionamento do banco de dados. Existem algumas regras básicas pra isso, como não matar índices por usar funções no campo, etc... Mas isso é apenas a PONTA DO ICEBERG.
Sugiro você ler a documentação de Tuning disponível nos manuais da ORACLE ou procurar pos apostilas/documentos que falem sobre isso, pois o assunto não é algo que se responda em forums... É bem mais amplo que isso.
-
- Rank: DBA Júnior
- Mensagens: 223
- Registrado em: Qui, 14 Dez 2006 10:45 am
- Localização: Brasília-DF
Cleber Zumba de Souza
Valeu dr_gori
- 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
Mas poe aí o SQL pra gente ver se tem algo visível que esteja deixando lento... manda pra nós
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Só pra colocar uma explanação que já vi, não sei se aqui no fórum mesmo...
Li que, quando uma query necessita de HINTS, a modelagem pode não estar legal, ou coisa do tipo.
Procede isso?
Grato,
Li que, quando uma query necessita de HINTS, a modelagem pode não estar legal, ou coisa do tipo.
Procede isso?
Grato,
-
- Rank: DBA Júnior
- Mensagens: 223
- Registrado em: Qui, 14 Dez 2006 10:45 am
- Localização: Brasília-DF
Cleber Zumba de Souza
dr_gori o select ele é pequeno e existe uma função MAX e é isso que o deixa lento. existe uma outra forma de eu pegar os mesmo resultados sem utilizar a função MAX?
O Select à baixo:
Essa tabela que estou utilizando contém 26.000 registros.
Aproveitando, o que significa colocar essa linha na cláusula WHERE: where 1 = 1
O Select à baixo:
SELECT cd_protocolo, MAX (dt_movimento) dt_ultimo_movimento
FROM db_scdweb.tbl_movimento
GROUP BY cd_protocolo
Aproveitando, o que significa colocar essa linha na cláusula WHERE: where 1 = 1
- 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
É lento porque você está fazendo um GROUP-BY de toda tabela.
No momento em que você colocar algum FILTRO aí, vai ficar rápido.
Você está pegando o MAX de todos protocolos. Se você pegar o MAX apenas dos protocolos que interessam a você, talvez fique bem mais rápido.
As vezes pra otimizar um SQL nem precisamos colocar HINTS. Apenas filtrar mais já resolve muita coisa...
No momento em que você colocar algum FILTRO aí, vai ficar rápido.
Você está pegando o MAX de todos protocolos. Se você pegar o MAX apenas dos protocolos que interessam a você, talvez fique bem mais rápido.
As vezes pra otimizar um SQL nem precisamos colocar HINTS. Apenas filtrar mais já resolve muita coisa...
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Cléber,
Existem N situações, onde se pode utilizar Where 1 = 1.
Eu o utilizei uma vez numa query dinâmica, numa concatenação de AND.
Existem N situações, onde se pode utilizar Where 1 = 1.
Eu o utilizei uma vez numa query dinâmica, numa concatenação de AND.
- 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
Agora fiquei curioso... Teoricamente, 1=1 pode ser simplesmente retirado do SQL que não fará a mínima diferença...trevisolli escreveu:Existem N situações, onde se pode utilizar Where 1 = 1.
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Bom, deixa-me explicar melhor...
Tenho um determinado select dinâmico onde, dependendo do parâmetro, o WHERE é alterado ("AND .... = .... ").
Por exemplo:
Se o parâmetro = 1,
Se o parâmetro = 2,
Se nenhum dos dois
Ou seja, como tenho que passar o v_select sempre, executo exatamente um "AND" que não me fará diferença alguma, que tem que ser a query original, por exemplo.
Não sei se consegui me expressar legal.
qualquer coisa, manda ai.
Tenho um determinado select dinâmico onde, dependendo do parâmetro, o WHERE é alterado ("AND .... = .... ").
Por exemplo:
Se o parâmetro = 1,
v_select := v_select || ' AND T.MODELO = 129 ';
v_select := v_select || ' AND T.MODELO = 137 AND X.COD_TIPO = 8';
v_select := v_Select || ' AND 1=1 ';
Não sei se consegui me expressar legal.
qualquer coisa, manda ai.
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Desculpem,
o "AND" nas situações passadas, não faz parte da cláusula, era fixo na query, por isso, completei apenas com 1=1, para que o select não terminasse com AND, beleza?
o "AND" nas situações passadas, não faz parte da cláusula, era fixo na query, por isso, completei apenas com 1=1, para que o select não terminasse com AND, beleza?
-
- Rank: Analista Sênior
- Mensagens: 130
- Registrado em: Seg, 22 Nov 2004 1:45 pm
- Localização: Niterói - RJ
Gustavo Erthal Jr. | TRISCAL
...................................................
Rio de Janeiro | (21) 2507-2010
São Paulo | (11) 3167-0526
www.triscal.com.br
...................................................
Rio de Janeiro | (21) 2507-2010
São Paulo | (11) 3167-0526
www.triscal.com.br
Cleber,
O que o Dr. Gori está querendo te dizer com relação aos filtros é que sua utilização é como usar um índice.
Imagine-se numa biblioteca com milhares de livros para escolher um somente. Se você não disser qual livro específico você quer, a bibliotecária terá que trazer todos para você escolher.
Então, se na cláusula WHERE você especificar o item ou uma faixa de itens para buscar, e esse item possuir um índice, o resultado da query será muito mais rápido.
A utilização WHERE 1 = 1 não oferece ganho algum, só serve para você dizer que a condição é verdadeira.
Abraços
O que o Dr. Gori está querendo te dizer com relação aos filtros é que sua utilização é como usar um índice.
Imagine-se numa biblioteca com milhares de livros para escolher um somente. Se você não disser qual livro específico você quer, a bibliotecária terá que trazer todos para você escolher.
Então, se na cláusula WHERE você especificar o item ou uma faixa de itens para buscar, e esse item possuir um índice, o resultado da query será muito mais rápido.
A utilização WHERE 1 = 1 não oferece ganho algum, só serve para você dizer que a condição é verdadeira.
Abraços
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Google [Bot] e 7 visitantes