Sql server LINQ和存储过程之间的性能差异 相关的

Sql server LINQ和存储过程之间的性能差异 相关的,sql-server,linq,stored-procedures,Sql Server,Linq,Stored Procedures,我听过很多关于预编译存储过程优点的反复讨论。但是LINQ和存储过程在选择、插入、更新和删除方面的实际性能差异是什么?是否有人运行过任何测试,以查看是否存在任何重大差异。我也很好奇,更多的交易是否会产生影响 我的猜测是LINQ语句在第一个事务之后被缓存,性能可能会几乎相同。想法?请参阅以获取帮助-我认为该帖子包含了大部分信息。您需要。LINQ2SQL查询的执行与任何其他特殊参数化SQL查询没有任何不同,除了生成器可能无法以最佳方式优化查询之外。LINQ查询也可以(并且应该)预编译。我没有任何基准可

我听过很多关于预编译存储过程优点的反复讨论。但是LINQ和存储过程在选择、插入、更新和删除方面的实际性能差异是什么?是否有人运行过任何测试,以查看是否存在任何重大差异。我也很好奇,更多的交易是否会产生影响


我的猜测是LINQ语句在第一个事务之后被缓存,性能可能会几乎相同。想法?

请参阅以获取帮助-我认为该帖子包含了大部分信息。您需要。

LINQ2SQL查询的执行与任何其他特殊参数化SQL查询没有任何不同,除了生成器可能无法以最佳方式优化查询之外。

LINQ查询也可以(并且应该)预编译。我没有任何基准可以与大家分享,但我认为每个人都应该阅读以供参考。我特别想看看预编译LINQ查询与存储过程的一些比较。

没有太大区别,只是当您有大量数据并且需要一些数据库调优时,LINQ可能会降级。

LINQ的性能应该接近,但我不同意上面的说法,即LINQ更快,不能更快,但是,在其他条件相同的情况下,它也可能同样快

我认为区别在于,一个好的SQL开发人员,知道如何优化并使用存储过程,在性能上总是会有一点优势。如果您不擅长SQL,请让Linq帮您解决,您的性能很可能是可以接受的。如果您是一个强大的SQL开发人员,如果您的应用程序需要,可以使用存储过程来挤出一些额外的性能


如果您编写糟糕的SQL来编写一些执行速度比Linq慢的存储过程,这当然是可能的,但如果您知道自己在做什么,那么存储过程和数据读取器是无与伦比的。

除非您试图从应用程序中获得每一毫秒,是否使用存储过程或LINQ可能需要由您期望开发人员了解的内容和可维护性来决定

存储过程会很快,但当您在积极开发应用程序时,您可能会发现使用LINQ的方便性可能是一个积极因素,因为您可以非常快速地更改查询和从LINQ创建的匿名类型

一旦你完成了应用程序的编写,你知道你需要什么,并开始考虑优化它,然后你可以考虑其他技术,如果你有良好的单元测试,那么你应该能够比较不同的技术,并确定哪个解决方案是最好的

您可能会发现,对.NET3.5与数据库交互的各种方式进行比较非常有用。

人们普遍认为,即席sql查询的性能优于存储过程。然而,这是错误的:

SQL Server 2000和SQL Server版本 7.0对语句处理进行了大量更改,扩展了许多 存储系统的性能优势 所有SQL语句的过程。SQL 服务器2000和SQL Server 7.0不支持 将部分编译的计划保存为 当存储过程 创建。存储过程是 在执行时编译,就像任何 其他Transact-SQL语句。SQL Server 2000和SQL Server 7.0 所有SQL语句的执行计划 在过程缓存中,而不仅仅是 存储过程执行计划

--


鉴于上述情况以及LINQ生成特殊查询的事实,我的结论是存储过程和LINQ之间没有性能差异。我也倾向于相信SQL Server在查询性能方面不会倒退。

考虑一个有一百万个条目的数据库表,连接到另一个有一百万个条目的表。。。您真的认为在Web服务器上执行此操作(无论是在LINQ还是在ad-hoc SQL中)会比让SQL Server在数据库上执行更快或更高效吗


对于简单查询,LINQ显然更好,因为它将被预编译,使您具有类型检查等优点。但是,对于任何需要进行的密集型数据库操作、报表构建、批量数据分析,存储过程将轻而易举地获胜。

我不希望数据库层采用编译代码。它应该是一个单独的层,而不是组合层。在我开发和使用敏捷的过程中,我不断地改变数据库设计,这个过程进展得非常快。在SQL Server中添加列、删除列或创建新表与在Excel中键入内容一样简单。在数据库级别,表的规范化或反规范化也非常快。现在有了Linq,我还必须在每次更改数据库时更改对象表示,或者在没有真正反映数据存储方式的情况下使用它。那是很多额外的工作

我听说Linq实体可以保护您的应用程序不受数据库更改的影响,但这毫无意义。数据库设计和应用程序设计需要齐头并进。如果我规范化几个表或对数据库进行其他重新设计,我就不希望Linq对象模型不再反映实际的数据库设计


那么,调整视图或存储过程的好处是什么呢。您可以直接在数据库级别执行此操作,而无需重新编译代码并将其发布到生产环境中。如果我有一个显示来自多个表的数据的视图,并且我决定更改数据库设计,那么我所要做的就是更改该视图。我的所有代码都保持不变。

Linq应该在sql或oracle中创建的视图之上的业务逻辑层使用。Linq帮助您为业务逻辑插入另一层,其维护工作由编码人员或非sql人员负责。它的性能肯定不如sqlc