【发布时间】:2018-07-03 13:51:47
【问题描述】:
我有一个太大的源表,查询花费的时间太长,无法直接用于按需报告。
我们生成的图表是基于时间的,通常分辨率是以月或天为单位的,所以我的第一个想法是创建一个“月”表和一个“天”表,并对这些表进行过滤/求和/计数,基本上是提前运行所有可能的查询。
问题是如何。我的第一个想法是编写一个 C# 控制台应用程序来加载一个月的所有数据,然后以某种方式过滤它(DataSet?DataView?)然后聚合它(加载到 List?LinqToSQL?),然后更新月份和日期表格。
有没有更好的方法来做到这一点?对于这篇文章中缺少代码,我提前道歉。我写这篇文章是为了在我开始编码之前提供建议。
【问题讨论】:
-
最佳实践是用户可以使用的汇总表。这些可以由触发器或定期运行的作业创建。
-
@GordonLinoff 什么样的“工作”?您有什么具体的技术推荐吗?
-
也许,然而,查询缓慢的原因是(糟糕的)索引选择或非 SARGable 子句。 SQL Server(通常)非常擅长快速处理非常大的数据集。看看其中一个执行缓慢的查询的 SQL 可能也很有趣
-
编写一些聚合这些数据的 INSERT 语句,并每天/每月将新数据插入到汇总表中,这样您的服务器就不必对每个请求执行聚合。您可以在Sql Server Agent 中安排作业。我绝对不会编写程序来执行此操作,因为这是非常基本的数据库级别的东西(或 shell 脚本和 cron 作业)
-
@Larnu - 以下查询需要 1:38 才能运行:'SELECT SUM(AMT) FROM Transactions WHERE TIME_STAMP >= '2017-11-11 00:00:00' AND TIME_STAMP
标签: sql sql-server aggregate reporting