gpt4 book ai didi

entity-framework - Entity Framework 生成低效的 SQL

转载 作者:行者123 更新时间:2023-12-04 07:27:47 25 4
gpt4 key购买 nike

我想知道为什么 Entity 框架会生成如此低效的 SQL 查询。在我的代码中,我希望 WHERE 对 INCLUDE 采取行动:

db.Employment.Where(x => x.Active).Include(x => x.Employee).Where(x => x.Employee.UserID == UserID)

但我最终得到了一个双 SQL JOIN:

SELECT [x].[ID], [x].[Active], [x].[CurrencyID], [x].[DepartmentID], [x].[EmplEnd], [x].[EmplStart], [x].[EmployeeID], [x].[HolidayGroupID], [x].[HourlyCost], [x].[JobTitle], [x].[ManagerID], [x].[WorkScheduleGroupID], [e].[ID], [e].[Active], [e].[Address], [e].[BirthDate], [e].[CitizenshipID], [e].[City], [e].[CountryID], [e].[Email], [e].[FirstName], [e].[Gender], [e].[LastName], [e].[Note], [e].[Phone], [e].[PostalCode], [e].[TaxNumber], [e].[UserID]
FROM [Employment] AS [x]
INNER JOIN [Employee] AS [x.Employee] ON [x].[EmployeeID] = [x.Employee].[ID]
INNER JOIN [Employee] AS [e] ON [x].[EmployeeID] = [e].[ID]
WHERE ([x].[Active] = 1) AND ([x.Employee].[UserID] = @__UserID_0)

我发现这个查询会创建更好的 SQL:

db.Employment.Where(x => x.Active).Where(x => x.Employee.UserID == UserID)

SELECT [x].[ID], [x].[Active], [x].[CurrencyID], [x].[DepartmentID], [x].[EmplEnd], [x].[EmplStart], [x].[EmployeeID], [x].[HolidayGroupID], [x].[HourlyCost], [x].[JobTitle], [x].[ManagerID], [x].[WorkScheduleGroupID]
FROM [Employment] AS [x]
INNER JOIN [Employee] AS [x.Employee] ON [x].[EmployeeID] = [x.Employee].[ID]
WHERE ([x].[Active] = 1) AND ([x.Employee].[UserID] = @__UserID_0)

但是,这里的问题是没有从数据库中检索到引用的实体。

为什么两个代码不生成相同的 SQL?

最佳答案

语句不同,SQL不同

Entity Framework 确实会产生低效的 TSQL,它总是如此。通过抽象出具有良好性能的 SQL 所必需的微妙之处,并用“腰带和大括号”替换它们,几乎总是可行的替代方案,您会牺牲实用程序的性能。

如果您需要良好的性能,请自己编写 SQL。 Dapper适合我。实际上,您不能指望“一刀切”的解决方案为您的特定情况提供最佳代码。您可以全面执行此操作,也可以只在需要的地方执行此操作。

除非您有大量或特定的性能要求,否则请继续使用它并使用您认为最简单的任何东西。如果您需要调整对数据库的查询,您将了解数据库引擎的详细信息并自己实现查询。如果您期望 Entity Framework 的下一个迭代成为 Elixir ,让您能够以最少的知识快速、高效地访问 SQL 数据,那么祝您好运。

附言

题外话,NoSQL可能也不是答案,只是不同类别的数据库。

关于entity-framework - Entity Framework 生成低效的 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41672263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com