据我所知,如果我在那里添加一些where
子句,我可以看到SQL Server Profiler显示该语句正在使用sq_executesql
;这是一个好方法吗?
我问的原因是因为我的主管认为sp_executesql
重用SQL语句并最小化性能问题。
如何解决她对LINQ To SQL性能问题的担忧?
答案 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会编译存储过程一次。