Acelerando suas consultas PL/SQL
[ad#texto]
Sei que tunning no PL/SQL é polêmico, pois o assunto envolve além das regras e características intrínsecas do banco de dados Oracle também características únicas do sistema operacional em execução do servidor, estrutura do hardware, método da instalação e configuração do banco Oracle.
Assim existem os casos reais e documentados e as boas práticas para que o seu PL/SQL execute da forma mais rápida possível assim como também existe coisas que aprendemos na prática que nem sempre funcionam em todos os ambientes e que nem sempre estão documentadas pela Oracle, por este motivo é que profissionais com experiência prática são tão concorridos no mercado.
Por isso, se vocês fizerem o que eu direi neste post e não surtir efeito ou ainda piorar a performance do seu PL/SQL não me responsabilizo, afinal a informática é a única ciência exata onde dois mais dois são cinco.
Até a versão 8 do banco de dados Oracle a ordem da cláusula where importava, e muito, na performance da select, após a versão 8 a Oracle implementou a heurística avançada, dando “inteligência” ao banco de dados para que o mesmo conseguisse otimizar seu próprio funcionamento de acordo com a relevância que uma select ou fragmento PL/SQL teria para a sua aplicação de modo geral. Isso aumentou a performance geral do banco e permitiu dinamizar as aplicações que faziam uso do Oracle.
Resumindo, a ordem de se montar o where perdeu importância (essa informação foi atestada por um DBA certificado da Oracle com o qual conversei).
Nem sempre, afinal a informática é exata até certo ponto.
Tenho notado em dois ambientes, leia-se empresas diferentes, que utilizam o banco de dados Oracle que a ordem do where pode ainda impactar no cálculo que a heurística executa, incrementando ou decrementando a performance da sua select.
Em suma, eu sempre procuro colocar os meus parâmetros o mais elevado possível, em select complexas e mais lentas consegui medir uma ligeira melhora no desempenho, seria algo assim:
select *
from sua_tabela ta
,sua_tabela2 tb
where ta.campo1 = 34
and tb.campo5 = 3
and ta.campo2 = tb.campo2
and ta.campo6 = tb.campo6
Notaram que os campos comparados por parâmetros estão acima?
Se alguém quiser e testar poste os resultados aqui.