SQL Server是否缓存LINQ to SQL查询?

时间:2009-03-20 14:21:33

标签: .net sql-server performance linq-to-sql

据我所知,在MS SQL Server 2000+存储过程中编译,并且比正常的非编译查询运行得更快。我想知道MS SQL Server是否还编译LINQ to SQL查询,并缓存编译,以达到性能目的。

5 个答案:

答案 0 :(得分:3)

对于SQL Server中的执行计划,存储过程与正常的非编译查询的速度没有太大差异。 See this了解有关速度的其他因素的更多信息。

LINQ-to-SQL生成正常的paramatised查询(SQL Server对LINQ一无所知,应用程序生成正常的SQL),因此余额是相同的。那就是如果你没有使用调用存储过程的LINQ-to-SQL函数(假设你的意思是查询)。

您可能还想阅读this,这是一个类似的问题,但重点关注LINQ与StoredProcs的更重要的好处

答案 1 :(得分:2)

SQL Server不了解LINQ。

据我所知,LINQ只是作为一个库运行,它使用查询生成SQL查询,然后以SQL文本命令的形式发送到服务器。

答案 2 :(得分:1)

据我所知,它表现为对SQL Server的正常查询。如果您的特定情况存在优势,则可以随时使用LINQ to SQL调用存储过程。

答案 3 :(得分:1)

MS SQL Server为任何针对它运行的TSQL缓存查询计划。缓存计划后,查询将运行得更快一些。我知道这个缓存有一个到期时间,但我还没有问过dba。

据我所知,MS SQL Server 2000是最后一个编译存储过程的人。那已经没有了。这就是为什么许多内联查询同样快(使用SQL Server 2000 +)。

答案 4 :(得分:1)

LinQ的CompiledQueries被SQL Server缓存,这就是为什么它们如此快得多。 正常的LinQ查询不会被SQL Server缓存。

进行测试。

创建正常的LinQ查询 创建相同的已编译LinQ查询。

编译后的查询运行了几次后,清理SQL Cache,你会发现它第一次执行时的执行时间与普通的LinQ查询几乎相同。

PS。您可以使用以下查询清理SQL Server缓存:DBCC DROPCLEANBUFFERS

所以,回答你关于LinQ查询和缓存的问题。

正常的LinQ查询不会被缓存,只需运行一次就可以使用。 编译的LinQ查询将由SQL Server缓存,并且如果您多次运行它将会提高性能。

我刚刚发现了它,我认为这很方便。