目前在做一个数据库监控系统,需要每天统计每张表的数据量,然后呈现每天的数据增量。数据库数据量为上亿级,因为是每天统计一次,所以本来想在晚上用count(*)来统计。但是对方说晚上他们还要跑很多其他任务,不能为了统计占用大量性能,而且count甚至可能跑不完,所以不让用count,现在改成在dba_tables里取num_rows的方法来获取数据量。跑了几天后,他们又嫌数据量不准确,大多数表统计出来的增量都是0,他们要我找出又快又准确(相对)的解决方案,求解这该怎么做?
------解决思路----------------------
执行命令
analyze table t1 compute statistics for table; -->user_tables
(只对表的总体信息进行统计,比如行数多少等,不涉及到表字段)
执行之后获取num_rows
没测试过执行效率,我这手边也没有海量数据的表
你可以找个表先试试,看看速度怎么样
------解决思路----------------------
数据表有没有用到自增序列号,晚上取对应 sequence 的 CURRVAL。
------解决思路----------------------
这些表是不是每天只是插入操作?
给这些表增加插入时间的字段,时间列的赋值可以使用触发器实现,不需修改前台程序
然后时间列加上索引,利用时间条件查找当天的增量
注意时间列上不要使用函数,否则不走索引
where col>=trunc(p_date) and col<trunc(p_date)+1