簡體   English   中英

使用Find()時實體框架生成低效選擇

[英]Entity Framework generates inefficient select when using Find()

我注意到在使用Find()方法時,實體框架會生成一些低效的查詢。 例如,這是我的C#代碼。

Model model = unit.Repository.DbSet.Find(model.ID);

生成Find()查詢

DECLARE @p0 int = 1

SELECT 
[Limit1].[ID] AS [ID], 
[Limit1].[UserID] AS [UserID], 
[Limit1].[Started] AS [Started], 
[Limit1].[Updated] AS [Updated], 
[Limit1].[Completed] AS [Completed]
FROM ( SELECT TOP (2) 
        [Extent1].[ID] AS [ID], 
        [Extent1].[UserID] AS [UserID], 
        [Extent1].[Started] AS [Started], 
        [Extent1].[Updated] AS [Updated], 
        [Extent1].[Completed] AS [Completed]
        FROM [dbo].[Table] AS [Extent1]
        WHERE [Extent1].[ID] = @p0
)  AS [Limit1]

它似乎正在運行一個完整的其他選擇查詢,這是不必要的。 這是使用SingleOrDefault()方法的輸出。

生成SingleOrDefault()查詢

DECLARE @p__linq__0 int = 1

SELECT TOP (2) 
[Extent1].[ID] AS [ID], 
[Extent1].[UserID] AS [UserID], 
[Extent1].[Started] AS [Started], 
[Extent1].[Updated] AS [Updated], 
[Extent1].[Completed] AS [Completed]
FROM [dbo].[Table] AS [Extent1]
WHERE [Extent1].[ID] = @p__linq__0

Find()生成兩個選擇是否有原因? 是否應該避免使用Find()方法來支持SingleOrDefault()方法?

我懷疑兩者之間是否存在任何性能差異,至少對於sql server而言。 看起來第一個只是在select周圍有一個額外的包裝器。 在我擁有的數據庫上運行類似的查詢會生成完全相同的計划,因此我認為外部選擇在執行計划中得到優化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM