linq生成的查询是否会被SQL Server 2008高效缓存?
或者使用linq的存储过程或者视图然后使用编译的linq查询更好吗?意见?
欢呼这里的重点是“有效”,或者更好......
即。视图由sql server缓存,然后在视图上使用linq ....
答案 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发出的查询将被缓存并重用 - 如果它们符合这些标准的话!