通过 GUID 获取条目的最快 EF Core Linq 扩展方法

问题描述 投票:0回答:1

我正在开发一个 Entity Framework Core 项目,我需要按数据库条目的

GUID
值检索数据库条目。目前,我正在使用基本的 Linq 查询,但我想知道是否有更快或更优化的方法来编写扩展方法来通过
GUID
获取条目。

我可以实施哪些策略或方法来提高

GUID 
查询的性能?具体来说,如何确保检索在数据库访问和 Linq 执行方面尽可能高效?

到目前为止,我已经使用

FirstOrDefault
实现了一个基本的 Linq 查询,通过其
GUID
检索条目,如下所示:

var result = context.Entries
                    .FirstOrDefault(e => e.Guid == targetGuid);

我预计这会足够高效,但在使用大型数据集进行测试后,我注意到一些性能瓶颈。我希望查询能够快速执行,即使有很多条目,但检索时间似乎比预期慢。

我正在寻找替代方法或优化来提高通过

GUID
查询时的性能,尤其是对于大型数据集。有没有更好的方法使用 EF Core 和 Linq 来处理此类查询?

c# sql-server linq entity-framework-core
1个回答
0
投票

GUID 列本身有优点和缺点,但从长远来看,将其作为主键(聚集索引)并不是最佳实践。这是因为 GUID 生成是随机的,插入时会导致碎片(由于磁盘上的布局杂乱,可能导致读写性能变慢)。

我假设由于这个简单的查询需要时间来执行,那么您拥有的数据量是巨大的。

您可以这样做:

  1. 使用整数 (int/bigint) Id 列以及 GUID。此 Id 列将充当您的主键,而 GUID 将供外部使用

  2. 使用顺序 GUIDS。这是 EFCore 支持的,可以通过提高依赖于顺序的索引效率来减少碎片

  3. 添加一个整数(int/bigint)Id列作为聚集索引,并将GUID作为非聚集索引。

© www.soinside.com 2019 - 2024. All rights reserved.