LINQ To SQL是否使用sp_executesql性能?

时间:2011-02-25 20:35:24

标签: tsql linq-to-sql

据我所知,如果我在那里添加一些where子句,我可以看到SQL Server Profiler显示该语句正在使用sq_executesql;这是一个好方法吗?

我问的原因是因为我的主管认为sp_executesql重用SQL语句并最小化性能问题。

如何解决她对LINQ To SQL性能问题的担忧?

3 个答案:

答案 0 :(得分:0)

Linq-to-Sql不适合高性能:它为方便起见进行了优化。如果您需要高性能,请使用标准的ADO.NET连接,命令和DataReader。

话虽如此,性能与大多数应用程序无关,因此Linq-to-Sql很有用。 :)

答案 1 :(得分:0)

如果您询问sq_executesql是否具有高性能,那么是的。来自MSDN关于sp_executesql的文章:

  

可以使用sp_executesql代替   执行a的存储过程   Transact-SQL语句很多次   将参数值更改为   声明是唯一的变化。   因为Transact-SQL语句   本身保持不变,只有   参数值改变, SQL   服务器查询优化器很可能   重用它生成的执行计划   第一次执行。

答案 2 :(得分:0)

当你提出两件事时,回答这个问题有点困难。即使所有事情都是平等的,Linq to SQL并不像创建POCO那样灵活 - 一旦付出代价,就是访问数据的最佳方式(最轻量级,快速且灵活)。这就是 Andomar 对DataReader的建议。如果您要求使用sq_executesql vs连接字符串发送到您的命令,那么 EddieGroves 就有答案。我只想补充说sq_executesql更安全,因为你将变量作为参数添加到调用中 - 更少的SQL注入机会。连接字符串也会强制SQL每次编译语句(因此速度较慢)。如果您将sq_executesql与CRUD存储过程进行比较,那么您就是对的。 CRUD表现更好,并且还可以处理潜在的SQL注入。 SQL Server会编译存储过程一次。