对计算字段

时间:2018-04-12 14:14:01

标签: c# asp.net-mvc sorting .net-core entity-framework-core

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

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

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

如果有人对瓶颈的位置有任何了解,如果有办法可以提高性能,我们将不胜感激。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

从SQL文档

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

所以你可以设置索引......取决于计算。

另外,根据您使用的SQL Server版本....您可以将该列标记为PERSISTED。

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