gpt4 book ai didi

performance - 制作内连接 linq 或使用 [table].[joiningTable].column 是一样的吗?

转载 作者:行者123 更新时间:2023-12-02 04:57:21 24 4
gpt4 key购买 nike

我最近开始研究 linq,我想知道我有 2 个相关表 Project (<=with fkAccessLevelId) 和 AccessLevel,我只想从两个表中选择值。现在我可以通过两种方式从这些表中选择值。

我常用的是:

(from P in DataContext.Projects
join AL in DataContext.AccessLevel
on P.AccessLevelId equals AL.AccessLevelId
select new
{
ProjectName = P.Name,
Access = AL.AccessName
}

另一种方法是:

(from P in DataContext.Projects
select new
{
ProjectName = P.Name,
Access = P.AccessLevel.AccessName
}

我想知道的是,如果我们增加表的数量,比如说 5-6 和 1-2 个包含数千条记录的表......,那么这些方法中的哪一个是有效的...?

最佳答案

您应该查看生成的 SQL。您必须了解 Linq 查询中有几个主要的性能瓶颈(在这种情况下我假设是 OMG...Linq to SQL?!?!)通常的主要瓶颈是服务器上的 SQL 查询。

通常 SQL Server 有一个非常好的优化器,所以实际上,给定相同的查询,重构,性能非常统一。

但是在您的情况下,这两个查询存在非常实际的差异。没有访问级别的项目不会出现在第一个查询中,而第二个查询将返回空 AccessName。实际上,您会将 LEFT JOININNER JOIN 进行比较。

TL:DR 对于执行相同操作的 SQL Server/Linq to Entity Framework 查询应该提供相似的性能。但是,您的查询远非相似。

关于performance - 制作内连接 linq 或使用 [table].[joiningTable].column 是一样的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20279439/

24 4 0