因为一个日志表的数据量比较大,所以都是一个小时一个表,按照时间来定表名,如:2011091301Table、2011091302Table,现在要做查询展现,但是都没有想到合理的方法,哪位有好的建议啊,3Q!

解决方案 »

  1.   

    1:分区视图(需要建立好 check约束)
    2:利用存储过程查询;在查询时,将需要访问的数据 放入临时表
      

  2.   

    1、通过select 1 from dba_tables where table_name=:pname,判断表是否存在
    2、对时间进行循环
    select * from 时间+Table
    3、对2的SQL语句用union all进行拼接
      

  3.   

    “分区视图”还真没想到过这个,O(∩_∩)O~,其实我也只是听过这个DD,去研究一下试试。
      

  4.   

    你说的“动态”是动态获取具体从哪个表查么?然后union??效率低吧?还是我没听懂你的意思??
      

  5.   

    根据查询时间循环动态拼接表名
    判断表存在
    查询数据放入临时表循环外显示数据union基本不应该用奇怪,没想好怎么查询你就敢分表?你一小时多少数据需要一小时一个表,你考虑过1年多少个表没有,一个库表太多了到底多少影响,会出什么问题?如果你的数据量真的这么大,你考虑分库了吗,如果不分库计算过一年后这个库多大?怎么维护(比如简单维护,就备份一下)
      

  6.   

    我也在纳闷这样分以后怎么维护
    不过就你目前的问题来说应该是借助sys.tables根据你的表名规律循环判断表是否存在
    存在则放入临时表,临时表中的数据需查询的话,根据需求建立索引
    之后再查询
    union或者union all起来效率肯定高不到哪去
    你这个随着时间的延续早晚崩盘...
      

  7.   

    写存储过程调用 如果单纯的拼接UNION ALL效率就不会高
      

  8.   

    O(∩_∩)O~不到一个月600G的硬盘就满了,然后一顿忙碌地清除数据,问多或说多一些,就会被告知先这么做着,以后有问题再说,类似的问题也不是第一次了,开始还去争去吵,结果都是白费力气,弄得好像我给自己争取利益似的