Utilizando cache no Oracle com subquery

[ad#texto]

Vimos que a troca de contexto deve ser evitada a fim de obtermos uma melhor performance em nossas aplicações PL/SQL, porém existe uma exceção a esta regra, tudo devido a um recurso da Oracle chamado de scalar subquery caching.

Este recurso consiste na capacidade do Oracle de determinar quais registros serão sempre retornados quando executamos uma subquery dentro de uma query e desse modo armazena este conjunto de resultados em cache deixando sua reutilização muito mais rápida, assim mesmo utilizando a troca de contexto conseguimos obter uma performance superior.

Porém estes recurso deve ser utilizado com cuidado a fim de ser implementado de forma correta.

Vamos supor a seguinte query em uma tabela com mais de 1 milhão de registros:

select lower(nome) nome, idade  from suaTabela

Este é um método tradicional (comum) para executar uma query, porém, utilizando em nosso benefício a aplicação do scalar subquery caching temos:

select (select lower(nome) from dual) nome, idade from suaTabela

Observem que a subquery select from dual não tem aplicação pratica alguma, somente irá impor ao Oracle a determinação do conjunto de resultados e dessa forma gerar o mecanismo de scalar subquery caching, onde iremos obter um ganho de performance em torno de 15% a 20%.

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.