开发环境为mssql2005数据库每天差不多有100W数据,然后数据有效期为1个月,1个月后这些数据都作废我现在想的思路是用sql agent每天在23:59分的时候建立个以当天日期命名的子表,然后每天的数据只会存在于当天的子表内自动删除一个月以前的表但有诸多的问题1.怎么建立以当天日期命名的子表,删除一个月以前的子表2.统计单天数据的话可以用对应的表名,但是统计多天的时候还要把各个子表互相关联,这样互相关联后再查询在效率上会不会有点低,主要是怕查询时间会很慢3.有没有比我好的简单点的方案啊,我怕如果不分表30天的话就3000W数据了这样查询太恐怖了。请各位指点迷津,谢谢拉

解决方案 »

  1.   

    回1楼:我去查查有关分区表的资料,以前没接触过这个回2楼:索引都是数据库优化引擎里的建议生成的,我是在想100W数据里查指定的和3000W里查指定的肯定会有个效率问题,如果我的是需要实时检测的,并且存在多个并发,这样3000W里查询会不会有问题?
      

  2.   

    1.怎么建立以当天日期命名的子表,删除一个月以前的子表这实际很简单,GETDATE()可以取当前时间,日期函数可以计算时间,CONVERT可以转换成字符串,系统表SYS.TABLES可以用来查看表是否存在,用这些组合下就可以实现建表和删除表。2.统计单天数据的话可以用对应的表名,但是统计多天的时候还要把各个子表互相关联,这样互相关联后再查询在效率上会不会有点低,主要是怕查询时间会很慢统计效率是个问题,建议采用临时表,抽取需要的数据到临时表后统计
    3.有没有比我好的简单点的方案啊,我怕如果不分表30天的话就3000W数据了这样查询太恐怖了。因为你的日志表特点,分表是合适的,虽然好的硬件和优化可以使得千万级单表查询速度可以接受,但是每日百万数据写入分表和百万数据写入千万级表的效率差别是很大的,综合起来分表利大于弊。
    分表带来的查询麻烦是你必须克服的,难以有更好的方案