(急救)关于海量表里面每天某个时段的统计信息

peigen521 2007-02-09 07:01:48
现有YC对CNTR进行操作,每进行一次操作就会在表cntr_event记录,里面有yc_m,cntr_n,event_dt三个字段,分别代表YC的名字CNTR的名字以及操作的时间(精确到秒 not null).
现在要求统计一个月中每天某个时段如2:00 -- 3:40, 11:00 -- 12:30, 18:00 -- 19:30每个YC的操作数,该如何执行性能会好些.
注:表里面数据量比较打,大概在2百万条记录左右
我现在能想出来的方案是按时段分三次取库,如:
select yc_m, count(*) as moves, trunc(event_dt, 'dd') as event_d
from cntr_event
where to_number(to_char(event_dt, 'hh24miss')) >= 020000 and
to_number(to_char(event_dt, 'hh24miss')) < 033000 and
event_dt >= to_date('2007-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') and
event_dt < to_date('2007-02-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
group by yc_m, trunc(event_dt, 'dd')

我的问题是:想请教各位大大,有没有比较好的解决方案,还有用上面的sql的话有没有什么安全上的隐患及性能问题.
谢谢!
...全文
330 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
myoldsaturn 2007-02-10
  • 打赏
  • 举报
回复
我觉得可以试试,按时间小时分区,再分区中建索引,分区放到不同的硬盘上面,这样来提高查询反应速度。如果机器是多CPU,多硬盘的,这种方式应该是有效的
peigen521 2007-02-10
  • 打赏
  • 举报
回复
谢谢hevin! 也建议客户取这么做的, 不过好像可行性不大, 应为统计的时间段是可配置的.
hevin 2007-02-09
  • 打赏
  • 举报
回复
能不能改用按年月的分区表来实现呢?

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧