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.

Petter Rafael

Desenvolvedor Web atua com as tecnologias Java e PHP apoiadas pelos bancos de dados Oracle e MySQL. Além dos ambientes de desenvolvimento acima possuiu amplo conhecimento em servidores Apache/Tomcat, Photoshop, Arte & Foto, Flash e mais uma dezena de ferramentas e tecnologias emergentes. Atualmente colabora com o Viablog escrevendo sobre programação e tecnologia.