Eu ouvi isso de amigos, mas nunca investiguei se isso é verdade.
É verdade que os resultados dos dados de uma consulta executada são armazenados no cache?
Quero dizer, se eu tiver um procedimento armazenado como:
SELECT * FROM USERLIST
... é verdade que o resultado (lista de usuários, neste caso) é armazenado em cache.
Além disso, se eu tiver estes:
SELECT * FROM USERLIST WHERE user="user"
SELECT * FROM USERLIST WHERE user="userzzz"
(no qual user / userzzz são passados como parâmetros), é correto que ele armazene 2 resultados diferentes no cache do banco de dados.
Acho que não, mas quero a confirmação de vocês, especialistas!
Respostas:
Os resultados da consulta não são armazenados em cache
No entanto, a tabela de origem e os dados e metadados do índice serão armazenados em cache após o 1º uso (sujeito a uso continuado, carga e pressão de memória)
Ou seja, os resultados de uma consulta serão avaliados a cada execução, mas as tabelas (e quaisquer índices etc.) usados pela consulta provavelmente já estarão na memória.
O plano de execução compilado será armazenado em cache e é daí que vem a confusão, suspeito
fonte
Quando um procedimento armazenado é executado, ele é otimizado e compilado e o plano de consulta é colocado no cache do procedimento.
Os procedimentos permanecem no cache para outros usuários, desde que haja espaço. Os procedimentos são removidos usando o algoritmo menos usado recentemente (LRU).
Embora a execução inicial de um procedimento armazenado exija recuperação de procedimentos do sistema no disco, é possível, para execuções subseqüentes, recuperar o plano otimizado do cache do procedimento. Esse comportamento pode levar a um ganho significativo de desempenho.
Portanto, o que está no cache é o plano otimizado do procedimento armazenado e não os resultados do procedimento armazenado.
fonte
Quando uma consulta está pronta para ser processada pelo SQL Server, o SQL Manager a pesquisa
cache
; e se não estiver lá, deve ser compilado. O processo de compilação abrange algumas coisas.Quando um procedimento armazenado é executado, ele é otimizado e compilado. de acordo com isso, um plano de consulta é colocado no cache do procedimento.
Verifique a
Compilation and Execution
seção Internos e arquitetura do processador de consultas do Microsoft SQL Server para obter informações detalhadas sobre o processamento de consultas, etc.Verifique o diagrama a seguir (do MSDN) para obter a execução do procedimento armazenado para esclarecer suas dúvidas:
fonte
O SQL Server basicamente executa essas etapas para executar qualquer consulta (chamada de procedimento armazenado ou instrução SQL ad-hoc):
1) verifique sintaticamente a consulta
2) se estiver tudo bem - ele verifica o cache do plano para ver se ele já possui um plano de execução para essa consulta
3) se existe um plano de execução - esse plano é (re) usado e a consulta executada
4) se ainda não houver um plano, é determinado um plano de execução
5) esse plano é armazenado no cache do plano para reutilização posterior
6) a consulta é executada
(cópia da resposta de Marc_s)
fonte
Como outros já declararam, os resultados da consulta no SQL Server não são armazenados em cache.
Se você deseja armazenar em cache os resultados de uma consulta (ou um SP), existem soluções alternativas. Por exemplo, consulte este artigo no site do Brent Ozar .
fonte