linq生成的查询是否被SQL Server 2008有效缓存?

时间:2010-02-06 14:33:54

标签: sql linq performance

linq生成的查询是否会被SQL Server 2008高效缓存?

或者使用linq的存储过程或者视图然后使用编译的linq查询更好吗?意见?

欢呼

这里的重点是“有效”,或者更好......

即。视图由sql server缓存,然后在视图上使用linq ....

3 个答案:

答案 0 :(得分:2)

根据Damien Guard已经给出的答案,在LINQ to SQL和EF LINQ提供程序中存在一个小故障,无法为涉及字符串参数的查询设置一致的变量长度。

http://damieng.com/blog/2009/12/13/sql-server-query-plan-cache

显然它已在.NET 4.0中修复。

在过去,我编写了存储过程来代替LINQ查询,主要用于复杂的类似报表的查询,而不是简单的CRUD,只是在对我的应用程序进行概要分析之后。

答案 1 :(得分:1)

L2S只是将查询传递给SQL Server 2008.因此,与任何其他进程提交的任何其他查询一样,它们将被缓存或不缓存。编译Linq查询的事实对SQL Server处理查询的方式没有影响。

答案 2 :(得分:1)

LINQ生成的查询是正常的SQL查询,例如您自己手工编写的SQL查询,它们遵循相同的规则:如果查询文本相同(直到最后一个逗号和空格)之前的查询文本,其查询执行计划可能已被缓存,因此可以重复使用。

关键是:查询文本必须完全相同 - 如果即使单个空格不同,SQL Server也会将其视为新查询,因此将完成解析,分析的整个过程,找到一个查询计划并执行它。

但基本上,是的 - LINQ发出的查询将被缓存并重用 - 如果它们符合这些标准的话!