Linq to SQL - 视图与存储过程

Posted

技术标签:

【中文标题】Linq to SQL - 视图与存储过程【英文标题】:Linq to SQL - Views vs Stored Procedures 【发布时间】:2011-04-07 15:45:40 【问题描述】:

我想知道我何时在应用程序中使用 L2S 并从多个表中获取数据,哪个更喜欢 sql 过程(select...join - 表)或 sql 视图(select...join - 表)。

谢谢/Yogesh

【问题讨论】:

Difference Between Views and Tables in Performance 的可能重复项 【参考方案1】:

您需要了解将存储过程与视图进行比较并不是一个很好/公平的比较。他们做不同的事情。这是两种完全不同类型的对象。

如果您只需要数据并且您所做的只是一些连接,那么请使用视图。如果您正在编写一些额外的代码并处理参数/多个语句,请使用存储过程。 请记住,在存储过程内部,您仍然可以引用视图。所以可能会出现两种情况都使用的情况!

很多人喜欢创建具有大量连接和过滤器(WHERE 子句)的单一数据视图。然后,他们在存储过程中使用此视图,根据传入的参数提供额外的过滤。其他人喜欢在存储过程中显式连接表。

性能取决于索引,而不是直接访问表而不是使用视图。因此,要注意的主要事项是您在表定义中设置了哪些索引。为搜索中非常常见的字段添加索引等。

【讨论】:

也想知道绩效视角 @user532384 - 我认为您可能需要对视图和存储过程进行一些阅读,它们并不相同。请参阅我的回复,了解您需要两者的原因。在某些情况下,您希望过滤数据并使用来自客户端/Web 代码的参数。在这种情况下,您将这些参数传递给存储过程,并且在您的存储过程中,您可以SELECTing 来自一个表、多个表、一个视图或多个视图的数据。【参考方案2】:

视图和存储过程之间的一个重要区别。除了标准/性能考虑之外,这应该指导您的选择。 您正在从多个表中获取数据。你总是得到相同的数据吗?如果是这样,去看看。 您是否根据参数获得不同的数据?使用存储过程。

这是一个过于简化的分析,但根据我们掌握的信息,我认为它已经足够好了......

网上有很多文章可以帮助您做出选择。 Here 就是一个例子

This article 提供了很多关于在视图/存储过程之间进行选择的性能影响的有用信息。

【讨论】:

我认为这个答案还可以,但发帖人需要意识到您无法将视图与存储过程进行比较。它们是两个不同的对象。

以上是关于Linq to SQL - 视图与存储过程的主要内容,如果未能解决你的问题,请参考以下文章

LINQ to SQL语句(20)之存储过程

如何在带有 LINQ to SQL 的存储过程中使用临时表

如何使用存储过程在 LINQ to SQL 中使用事务?

带有存储过程的实体框架 VS LINQ to SQL VS ADO.NET? [关闭]

Linq to Sql vs Nhibernate vs SubSonic vs 存储过程(帮助)

通过 LINQ-to-SQl 加载数据集