1

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

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

我很确定性能下降是由于计算字段上缺少索引,或者每个记录的计算属性都被重新计算然后排序/过滤,或者两者兼而有之。

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

4

2 回答 2

0

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

于 2018-04-12T14:22:50.510 回答
0

来自 SQL 文档

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

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

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

如前所述,使用索引在 SQL Server 上进行排序和过滤将比客户端快得多

于 2018-04-13T01:03:02.453 回答