web-dev-qa-db-fra.com

SQL Server cache-t-il les résultats de la requête?

Lorsque j'ai exécuté une requête, le serveur SQL met en cache les résultats?

parce que: quand je cours la requête ci-dessous:

SELECT id
FROM Foo
WHERE Foo.Name LIKE '%bar%'

La requête fonctionne pour 40 secondes à la 1ère fois.

Mais sur le deuxième point Il faut seulement quelques secondes.

est-ce parce que Le plan d'exécution est en quelque sorte mis en cache ou en réalité, les données sont en cache de manière à ce que je puisse le récupérer beaucoup plus rapidement sur la 2e course?

22
pencilCake

SQL Server ne cache pas les résultats de la requête, mais il met en cache les Pages de données Il lit en mémoire. Les données de ces pages sont ensuite utilisées pour produire le résultat de la requête.

Vous pouvez facilement voir si les données ont été lues à partir de la mémoire ou du disque en réglant

SET STATISTICS IO ON

Qui renvoie les informations suivantes sur l'exécution de la requête

Table 'ProductCostHistory'. Scan count 1, logical reads 5, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

La différence entre les lectures logiques et physiques est la lecture de la mémoire.

SQL Server revendiquera également une mémoire pour la mise en cache jusqu'à atteindre le maximum (configuré ou physique maximum), puis les pages les plus anciennes sont rinçues.

27
Filip De Vos