LINQs加入vs存储过程加入

时间:2016-12-19 18:34:22

标签: c# entity-framework linq stored-procedures performance-testing

关于使用LINQ来执行Joins,我读了这个article。我想知道除了编写一个可以加入表的存储过程之外还有多少好处?使用LINQ加入会导致任何性能问题吗?

更新

所以以此为例:

var employeeInfo =
                from employee in employees
                join addInfo in additionalInfo on employee.ID equals addInfo.CategoryID into allInfo
                select new { CategoryName = category.Name, Products = allInfo};

这个简单的join会让我受益于stored procedure吗?我知道,根据表格的大小和表格的数量,join可能会对何时使用LINQ vs store procedure产生重大影响。什么是好的"经验法则"关于LINQ联接应该使用的表和大小的数量,以及执行LINQ联接时是否会影响性能?

1 个答案:

答案 0 :(得分:1)

查询连接的性能通常取决于连接字段上是否存在正确的索引。如果您的查询正在生成全表扫描,则字段不是属性索引,您的性能将直接受到影响。如果您担心存储过程性能,请执行解释计划。

至于LINQ和join,你不想这样做。

以下是关于LINQ联接的一篇好文章,来自文章:

LINQ to SQL和LINQ to Entities的最大好处之一是导航属性,允许跨多个表进行查询,而无需使用显式连接。不幸的是,LINQ查询通常被编写为SQL查询的直接转换,而没有利用LINQ to SQL和LINQ to Entities提供的更丰富的功能。

https://coding.abel.nu/2012/06/dont-use-linqs-join-navigate/