SQL Server cache-t-il les requêtes LINQ to SQL?

Pour autant que je sache, dans MS SQL Server 2000+, les procédures stockées sont compilées et exécutées plus rapidement que les requêtes non compilées normales. Je me request si MS SQL Server comstack aussi les requêtes LINQ to SQL et cache cette compilation, à des fins de performance.

En ce qui concerne le plan d'exécution dans SQL Server, il n'y a pas de différences majeures de vitesse entre les procédures stockées et les requêtes normales non compilées. Voir ceci pour plus d'informations sur d'autres facteurs concernant la vitesse.

LINQ-to-SQL génère des requêtes paramétrées normales (SQL Server ne sait rien à propos de LINQ, l'application génère un SQL normal), donc l'équilibre est le même. C'est-à-dire si vous n'utilisez pas les fonctions LINQ-to-SQL qui appellent les process stockés (en supposant que vous vouliez dire les choses de la requête).

Vous pouvez également vouloir lire ceci , qui est une question similaire, mais se concentre sur les avantages les plus importants de LINQ vs StoredProcs

SQL Server ne connaît pas LINQ.

Pour autant que je sache, LINQ fonctionne comme une bibliothèque qui utilise les requêtes pour générer des requêtes SQL qui sont ensuite envoyées au server en tant que commands de text SQL.

Pour autant que je sache, il se comporte comme des requêtes normales à SQL Server. Vous pouvez toujours appeler des procédures stockées avec LINQ to SQL si des avantages existent pour votre cas spécifique.

MS SQL Server met en cache les plans de requête pour tout TSQL exécuté par rapport à celui-ci. Une fois le plan mis en cache, la requête s'exécutera un peu plus vite. Je sais qu'il y a un timeout d'expiration pour ce cache, mais je n'ai pas demandé à la dba à ce sujet.

Pour autant que je sache, MS SQL Server 2000 a été le dernier à comstackr les procs stockés. Ce n'est plus fait. C'est pourquoi beaucoup de requêtes en ligne sont aussi rapides (avec SQL Server 2000+).

ComstackdQueries de LinQ est mis en cache par SQL Server, c'est pourquoi ils sont beaucoup plus rapides. Les requêtes LinQ normales ne sont pas mises en cache par le server SQL.

Pour tester.

Créer une requête LinQ normale Créer la même requête LinQ compilée.

Une fois la requête compilée exécutée plusieurs fois, nettoyez le cache SQL et vous remarquerez qu'il aura presque le même time d'exécution que la requête LinQ normale la première fois.

PS. Vous pouvez nettoyer le cache SQL Server avec la requête: DBCC DROPCLEANBUFFERS

Donc, pour répondre à votre question sur les requêtes LinQ et la caching.

Les requêtes LinQ normales ne sont pas mises en cache et doivent être utilisées lorsque vous ne devez les exécuter qu'une seule fois. Les requêtes LinQ compilées sont mises en cache par SQL Server et améliorent les performances si vous les exécutez plusieurs fois.

Je viens d'apprendre à ce sujet et je pense que c'est pratique à savoir.