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%.