如何使用实体框架获得表中的最新行(考虑性能)

本文关键字:最新 性能 实体 何使用 框架 | 更新日期: 2023-09-27 17:49:33

我担心性能,特别是在大表上。在我的例子中,StatusId是一个IDENTIY PRIMARY KEY

我想知道是否有更好的方法(更快)来获取表中的最后一个条目。

  public IQueryable<GaStatus> GetLastStatus()
    {
        return context.GaStatuses.OrderByDescending(x => x.StatusId).Take(1);
    }

如何使用实体框架获得表中的最新行(考虑性能)

实体框架为我生成以下SQL:

SELECT TOP (1) 
[Extent1].[StatusId] AS [StatusId]
FROM [dbo].[GaStatuses] AS [Extent1]
ORDER BY [Extent1].[StatusId] DESC

这看起来是获得预期结果的合理方法,尽管'Extent1'不容易读取。参见示例如何使用SQL Server读取最后一行

因此,我不相信在实体框架中有更好或更快的方法来做到这一点。

但是几乎总有一种方法可以提高给定SQL查询的性能。例如,查看我的特定数据库中的执行计划,ORDER BY执行集群索引扫描。从性能的角度来看,这可能是好的,也可能不是。因此,根据您的数据库,您可能能够通过直接编写SQL而不是让实体框架为您生成SQL来识别性能问题并提高性能。

return context.GaStatuses.Max(x => x.StatusId);