为什么所有突然的计算列开始降低性能?

why all the sudden computed columns started to slow down the performance?

用户能够在上午 10 点之前运行 报告。在同样的报告变得非常缓慢之后,有时用户就没有耐心等待了。经过一些故障排除后,我找到了导致延迟的列。它是使用函数来计算结果的计算列。

大约在同一时间,我收到了另一个关于 运行ning 报告速度慢的抱怨,但它一直运行良好。经过一些故障排除后,我找到了导致延迟的列:

where (Amount - PTD) <> 0

同样,Amount 列是计算列。

所以我的问题是:

为什么始终是报告一部分的所有突然计算列开始显着降低性能?即使没有人使用数据库。

大约上午 10 点之后真的会发生什么?

如果我让这些列持久化有什么缺点?

谢谢

你在这里没有提供很多细节 - 所以我只能笼统地回答。

因此,一般来说 - 数据库性能往往由瓶颈决定。在具有 1 条记录、10 条记录、1000 条记录、100000 条记录的 table 上,查询可能 运行 正常 - 然后在 100001 条记录时,它突然变慢。这是因为您超出了系统中的某些边界 - 例如,数据不再适合内存。

确实很难识别这些瓶颈,甚至更难预测 - 但请密切关注 perfmon,看看您的 CPU、磁盘 i/o 和内存统计信息在做什么。

计算列本身不太可能成为问题 - 但在 "where" 语句中使用它们(尤其是与其他计算)可能会很慢,如果你没有索引的话柱子。在您的示例中,您可能会为 (Amount - PTD) 创建另一个计算列并也在该列上创建索引。