Oracle Hints

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
cleberzumba
Rank: DBA Júnior
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.
Avatar do usuário
dr_gori
Moderador
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

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.
cleberzumba
Rank: DBA Júnior
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
Avatar do usuário
dr_gori
Moderador
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

Mas poe aí o SQL pra gente ver se tem algo visível que esteja deixando lento... manda pra nós :-D
Trevisolli
Moderador
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

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,
cleberzumba
Rank: DBA Júnior
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:

Selecionar tudo

SELECT   cd_protocolo, MAX (dt_movimento) dt_ultimo_movimento
   FROM db_scdweb.tbl_movimento
GROUP BY cd_protocolo
Essa tabela que estou utilizando contém 26.000 registros.

Aproveitando, o que significa colocar essa linha na cláusula WHERE: where 1 = 1
Avatar do usuário
dr_gori
Moderador
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

É 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...
Trevisolli
Moderador
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

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.
Avatar do usuário
dr_gori
Moderador
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

trevisolli escreveu:Existem N situações, onde se pode utilizar Where 1 = 1.
Agora fiquei curioso... Teoricamente, 1=1 pode ser simplesmente retirado do SQL que não fará a mínima diferença...
Trevisolli
Moderador
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

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,

Selecionar tudo

    v_select := v_select || ' AND T.MODELO = 129 ';
Se o parâmetro = 2,

Selecionar tudo

    v_select := v_select || ' AND T.MODELO = 137 AND X.COD_TIPO = 8';
Se nenhum dos dois

Selecionar tudo

    v_select := v_Select || ' AND 1=1 ';
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.
Trevisolli
Moderador
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

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?
erthal
Rank: Analista Sênior
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

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
Responder
  • Informação