首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何定期重建经常访问的报告表?

如何定期重建经常访问的报告表?
EN

Stack Overflow用户
提问于 2011-06-08 00:15:08
回答 4查看 1.7K关注 0票数 10

刷新一张已准备好的报表大约需要5-10分钟。我们希望不断刷新这个表(可能每15分钟刷新一次或连续刷新一次)。

我们非常频繁地查询这个报告表(每分钟查询很多次),并且我不能在任何时间内保持它。如果数据是15分钟前的,也没问题。

我不能删除该表并重新创建它。我不能删除表格的内容并重新创建它。

有没有我应该使用的技术,比如在两个表之间交换(当我们构建另一个表时,从一个表中读取),或者我是否将这个5-10分钟的过程放在一个大事务中?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-08 00:50:01

Use synonyms?。在创建时,这指向tableA。

代码语言:javascript
复制
CREATE SYNONYM ReportingTable FOR dbo.tableA;

15分钟后,创建tableB并重定义同义词

代码语言:javascript
复制
DROP SYNONYM ReportingTable;
CREATE SYNONYM ReportingTable FOR dbo.tableB;

同义词只是一个指向实际表的指针:这样,对实际表重命名等的处理被简化和抽象,所有代码/客户端都将使用ReportingTable

编辑,2011年11月24日

同义词在所有版本中都可用:分区切换仅适用于企业/开发人员。

编辑,2012年2月

您可以在标准版(可能是Express,未测试的)中切换整个表

代码语言:javascript
复制
ALTER TABLE .. SWITCH ..

如果目标表是空的,这将比同义词更优雅。

编辑,2012年2月(2)

此外,您还可以根据Caching joined tables in SQL Server通过模式进行旋转

票数 14
EN

Stack Overflow用户

发布于 2011-06-08 00:34:39

是的,您应该交换表,如果还没有这样做,请考虑对报告表使用不同的服务器或其他物理分区。

对于接近实时的报告,建议的方法是从操作系统卸载读取负载,并将报告系统中的写入活动与读取活动分开。

至少在逻辑上,通过准备一个表,您已经完成了第一部分。在用于用户的只读表和用于更新的单独表之间的交换消除了事务之间的读写冲突。代价是用户的缓存延迟,但如果需要,应该可以采取措施最小化准备时间,并更频繁地交换表。

有关实时报告的设计选择的更多信息,我推荐Best Practices in Operational BI的Wayne Eckerson撰写的一篇写得很好的论文。

票数 1
EN

Stack Overflow用户

发布于 2011-06-08 00:20:50

有两个表听起来是最简单的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6268341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档