0

我们有一个包含大约 30 000 0000 行的大型数据表,并且目前每天以每天 100 000 行的速度增长,而且这个数字会随着时间的推移而增加。

今天,我们直接从数据库(MS-SQL 2012)生成不同的报告并进行大量计算。

问题是这需要时间。我们有索引等等,但今天的人们想要极快的报告。

我们还希望能够更改时间段、查看数据的不同方式等等。

我们只需要查看一天前的数据,以便我们可以获取昨天的所有数据并对其进行处理以加快查询和报告的速度。

因此,你们中的任何人都对一个快速且仍在网络上而不是在 Excel 或 BI 工具中的解决方案有任何好的想法吗?

今天所有的报告都在 asp.net c# webforms 中,查询 MS SQL 2012 表。

4

1 回答 1

0

您有一个 OLTP 系统。您通常希望在这样的系统上最大化您的吞吐量。报告将需要使用闩锁和锁来获取数据。这会拖累您的 OLTP 的吞吐量,并且有利于报告(附加索引)将不利于您的 OLTP,因为它会对性能产生负面影响。甚至不要认为打耳光WITH(NOLOCK)会减轻一些负担。;)

正如其他人所说,您可能希望考虑将活动数据与报告数据分开。

如果您有企业版,则对表进行分区可以完成此操作。否则,您将需要做一些像分区视图这样的黑客操作,根据您的数据访问方式,这可能对您有用,也可能对您不起作用。

我会定期查看从系统中提取所需数据并将其推送到其他地方。其他地方是同一数据库中的不同表集还是同一服务器上的不同目录或完全不同的服务器将取决于许多变量(成本、实施时间、数据复杂性、速度要求、存储子系统等)。

由于听起来您没有超级具体的报告要求(目前您查看的是昨天的数据,但很高兴看到更多等),我会考虑在报告表中实现列存储索引。它为查询聚合提供了惊人的性能,即使是在聚合表上,您也不必指定特定的粒度(WTD、MTD、YTD 等)。但缺点是它是一个只读数据结构(并且在创建索引时会占用内存和 CPU)。SQL Server 2014 将引入可更新的列存储索引,这将是巨大的,但还需要一段时间。

于 2013-11-03T04:21:36.497 回答