中间表的由来
中间表是数据库中专门存放中间计算结果的数据表。报表系统中的中间表是普遍存在的。那么,这些中间表是如何出现的?为什么中间表会越来越多?中间表会给项目组带来什么样的困扰,如何解决这些困扰?这里我们就尝试探讨一下这个问题。
中间表出现的典型场景主要有三个:
一步算不出来。数据库中的原始数据表要经过复杂计算,才能在报表上展现出来。一个 SQL 很难实现这样的复杂计算。要连续多个 SQL 实现,前面的生成中间表给后边的 SQL 使用。
实时计算等待时间过长。因为数据量大或者计算复杂,报表用户等待时间太长。所以要每天晚上跑批量任务,把数据计算好之后存入中间表。报表用户基于中间表查询就会快很多。
多样性数据源参加计算。来自于文件、NOSQL、Web service 等的外部数据,需要与数据库内数据进行混合计算时,传统办法只能导入数据库形成中间表。
中间表带来的问题
在一个运营商的报表系统中,我们发现了一个让人吃惊的现象。在 DB2 数据仓库中,有两万多个数据库表!经过深入了解发现,真正的原始数据表只有几百张,剩下的大量的数据库表都是为查询和报表服务的中间表。
经过几年乃至十几年的运行,数据库中的中间表越来越多,甚至出现这个项目中上万个的情况。大量中间表带来的直接困扰是数据库存储空间不够用,面临频繁的扩容需求。中间表对应的存储过程、触发器等等需要占用数据库的计算资源,也会造成数据库的扩容压力。
那么,是不是可以清理掉一些不用的中间表?一