Linq to SQL不会将连接提示发送到服务器。因此,使用Linq to SQL的联接的性能将与“直接”发送到服务器(即使用纯ADO或SQL Server
Management Studio)的同一联接的性能相同,而没有指定任何提示。
Linq to SQL也 不允许
您使用联接提示(据我所知)。因此,如果要强制执行特定类型的联接,则必须使用存储过程或
Execute[Command|Query]方法来执行。但是,除非您通过编写来指定
INNER[HASH|LOOP|MERGE] JOIN联接类型,否则SQL Server始终会选择它认为最有效的联接类型-查询的来源无关紧要。
其他Linq查询提供程序(例如Entity framework和NHibernate Linq)将执行与Linq to
SQL完全相同的操作。这些都没有直接了解如何为数据库建立索引的知识,因此它们都没有发送连接提示。
Linq to Objects有点不同-在SQL Server中,它将(几乎?)始终执行“哈希联接”。这是因为它缺少执行合并联接所需的索引,并且哈希联接
通常
比嵌套循环更有效,除非元素的数量很小。但是首先确定一个元素中的元素数量
IEnumerable<T>可能需要完整的迭代,因此在大多数情况下,假设最坏的情况并使用哈希算法会更快。



