对计算字段进行排序和筛选

Sorting and Filtering on a Calculated Field

我目前正在使用 NonFactors/MVC6-Grid 来表示我的索引页面上的数据,用于使用 .NET Core 2.0 和 MVC 构建的相当基本的 CRUD 应用程序。我有一个包含多个字段的模型,其中一些是计算字段。

使用 MVC 网格进行排序和过滤非常有效,即使有超过 550,000 条记录。但是,当我尝试对其中一个计算字段进行排序和筛选时,性能会大幅下降(大约需要 45 秒)。这不是世界末日,但我想知道是否有办法提高计算字段的性能?

我很确定性能下降要么是由于计算字段上缺少索引,要么是每个记录的计算 属性 被重新计算然后 sorted/filtered,或两者。

如果有人对瓶颈可能在哪里有任何见解,并且如果有办法提高性能,我们将不胜感激。

您从数据库中获取记录,根据条件进行过滤并在 C# 代码中进行计算,然后将其映射到您的 Dto 列表并应用排序。最后,return 到客户端代码的 Dto 列表。

来自 SQL 文档

  • 计算列不能用作 DEFAULT 或 FOREIGN KEY 约束定义或带有 NOT NULL 约束定义。 但是,如果计算列值由确定性定义 索引中允许表达式和结果的数据类型 列,计算列可以用作索引中的键列或 作为任何 PRIMARY KEY 或 UNIQUE 约束的一部分。例如,如果 table 有整数列 a 和 b,计算列 a + b 可能是 索引,但计算列 a + DATEPART(dd, GETDATE()) 不能 索引,因为该值可能会在后续调用中发生变化。

所以你也许可以建立一个索引...取决于计算。

还取决于您使用的 SQL 服务器的版本....您可以将该列标记为 PERSISTED。

在 SQL 服务器上使用索引进行排序和过滤将比之前建议的客户端快得多