首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL如何正确创建汇总表?

SQL如何正确创建汇总表?
EN

Stack Overflow用户
提问于 2020-06-03 16:07:16
回答 1查看 665关注 0票数 0

我有底层表,数据在这些表上不断变化。每隔一分钟左右,我运行一个存储过程,将这些底层表中的数据汇总到一个汇总表中。摘要的时间非常长(~30),所以没有一个“摘要视图”是没有意义的。此外,汇总表经常被多个用户访问,它需要快速、响应性强,不能停机。

要解决这个问题,请在存储过程中执行以下操作:

  1. 将数据汇总为“新汇总表”(由于“当前汇总表”满足用户的需要,因此它可能需要多长时间)
  2. 将“当前汇总表”
  3. 重命名“新摘要表”删除为“当前汇总表”

我的问题是:

当用户试图访问“当前汇总表”时,当总结过程在上面的步骤2和步骤3之间时,会发生safe/proper?

  • What吗?

  • ,有什么正确的方法来做到这一点?在一天结束时,我只需要一个摘要,它总是快速(这是重要的)可访问和最新的(在一分钟左右)

EN

回答 1

Stack Overflow用户

发布于 2020-06-03 17:00:43

通过对细节使用触发器,可以使摘要保持同步。对于像average这样的东西,还需要在汇总表中跟踪和计数,这样就可以重新计算平均值了。如果具有批量搅动,并且Server具有两种类型的触发器,则按行触发器的开销可能比操作的所有行的开销都要高。插入可以生成汇总行或更新它,删除可以更新或删除摘要行,而更新可能会更改键,两者都是如此。当然,对于任何细节行,都可能有多种类型的摘要行。

Oracle有一个物化视图,所以可能SQL Server也有物化视图。哦,看,是的!谷歌是我的朋友,那么多值得记住的东西!在最好的情况下,这将类似于上面的简写。

在带有此类触发器的详细表中,有可能出现大量延迟。使用定期查询重新生成汇总表可能足以满足某些用途。过程可以截断前一个表以供重用,在其中生成一个新表,然后在转换交换中生成名称。如果表中或表中有时间戳,则过程可以跳过不变的更新。用于查询的锁、磁盘和CPU开销通常比查询的开销小得多。

除了视图之外,像中位数这样的摘要很难支持,但是如果索引(不是聚集的,排序的不是散列索引),它可能运行得很快,因为查询可以从非聚集索引中直接完成。过多的索引会减缓事务的速度(搅动),所以很多人使用复制表来报告,而父事务表上的索引很少,而复制表上的索引面向报表。

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

https://stackoverflow.com/questions/62177453

复制
相关文章

相似问题

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