假设有一个数据库表:A 表,该表每时每刻都会产生数据,且该表没有主键来标识唯一性,也没有时间等可以标识范围的列,数据只有增加没有删除。
那么问题来了:
- 如果用户需要查看一天某一个小时点A 表的状态(即一天 24 小时每一个小时整点时的状态),应该如何最大效率地进行回溯查询?
- 如果用户还需要对 A 表数据进行条件过滤,并查看某一个小时点该过滤条件下 A 表的状态,那这个又应该如何去查询呢?
不考虑 A 表为什么这么设计,也不考虑分库分表以及 A 表查询效率等问题,只考虑如何最大效率地保存 A 表每个小时点的快照,任意一个数据库(postgre,mysql,oracle 都可以)
我目前想到的解决方案如下:
- 使用
CREATE TABLE TMP001 AS SELECT * FORM ATABLE,但是这样我感觉效率好像不高,而且每一次都生成数据,容易导致硬盘爆炸 - 使用 ROWNUM 来进行标识每一原始行的序号,每一个时间点都保存一下当前条件所记录的 ROWNUM。但是如果当数据行数达到了几百万的时候,是否还能保持效率?
除了以上解决方案,我想问一下数据库有没有一种类似 CREATE VIEW AS 的功能,但是在创建视图之后,不再收到原有 A 表增加数据的影响。这个功能点不知道大家有没有遇到过,求解,谢谢!