我担心性能,特别是在大 table 上。
在我的示例中,StatusId是IDENTIY PRIMARY KEY
。
我想知道是否有更好的方法(更快)来获取表中的最后一个条目。
public IQueryable<GaStatus> GetLastStatus()
{
return context.GaStatuses.OrderByDescending(x => x.StatusId).Take(1);
}
最佳答案
Entity Framework 会为我生成以下SQL:
SELECT TOP (1)
[Extent1].[StatusId] AS [StatusId]
FROM [dbo].[GaStatuses] AS [Extent1]
ORDER BY [Extent1].[StatusId] DESC
尽管“Extent1”不容易阅读,但这似乎是获得所需结果的合理方法。参见例如How to read the last row with SQL Server。
因此,我不认为在Entity Framework中有更好或更快的方法来执行此操作。
但是,几乎总有一种方法可以改善给定SQL查询的性能。例如,查看我特定数据库中的执行计划,ORDER BY进行聚集索引扫描。 This might or might not be good from a performance point of view.因此,根据数据库的不同,您可以直接编写SQL而不是让Entity Framework为您生成SQL,从而能够确定性能问题并提高性能。