使用Linq和存储过程

时间:2008-12-03 09:39:21

标签: linq performance stored-procedures

我想计划数据访问层,我想使用Linq。 我读到linq有性能问题,你可以使用linq存储过程。 在规划我的数据访问层时,我应该使用linq存储过程吗?这对性能至关重要吗?我应该什么时候使用它们? 我知道存储过程对于安全性是必不可少的,但linq使用类型安全查询,因此存储过程的唯一原因是性能。

谢谢,

欧米

3 个答案:

答案 0 :(得分:2)

根据我的阅读,服务器缓存通过LinqToSql生成的查询的执行计划,因此这些查询的执行方式与等效的存储过程大致相同。如果您使用存储过程,那么您将失去使用LinqToSql所带来的好处,因为您的查询逻辑将保留在数据库中。

有关更多信息,请参阅Rico Mariani关于LinqToSql性能的blog series以及this blog post

答案 1 :(得分:2)

如果您只是编写简单的CRUD,存储过程不太可能帮助您提高性能。据我所知,存储过程的执行路径与准备好的语句几乎相同 - 即适当优化和缓存。

当你完全可以在数据库中完成工作时,它们会产生很大的不同,否则这会导致多次往返数据库(也有网络流量和延迟)。

您在哪里读到LINQ存在性能问题?我知道一个特定的问题是通过预编译查询修复的,但除此之外,我认为它基本上没问题......

答案 2 :(得分:0)

我建议使用LINQ或存储过程,但不是两者兼而有之 - 没有真正的理由将两者结合起来,你就不会在性能方面获胜。 LINQ对于小规模Web应用程序,大型Web应用程序的存储过程或更好的可扩展性非常有用

问题不仅在于网络应用程序在用户数量,服务页面数等方面的增长......它也成为维护问题。如果您的查询随着时间的推移变得更加复杂,那么您的LINQ代码可能会成为维护的噩梦。存储过程仍然很好地隐藏在数据库层中。并且......无论任何人说什么,在数据库级执行的查询总是会执行得更快。