我的数据量主表基本上每个月500万条,这样如果每个月不做Archive,查询和生成报表都非常慢,但客户又要求能够经常方便的查询历史纪录。
如何解决这样的难题?
方法一
根据经常用到的查询来设计数据存储方案,如经常查3个月以内的数据就建立一个作业,每天定时将3个月以前的数据导入历史表,万一查3个月以前的数据(应该比较少)就联表查询。
方法二
1.做个历史库,将部分数据转至历史库; 2.建视图关联当前库和历史库,需要查历史记录的时候就从这个视图中查; 3.前台可以做两个报表(当前的/所有的),数据源分别指向当前表和视图。
从2个数据库联合2个表来查询(union all)
使用联结服务器: EXEC sp_addlinkedserver '别名','','MSDASQL',NULL,NULL,'DRIVER={SQL Server};SERVER=远程名;UID=用户;PWD=密码;' exec sp_addlinkedsrvlogin @rmtsrvname='别名',@useself='false',@locallogin='sa',@rmtuser='sa',@rmtpassword='密码' GO 然后你就可以如下: select * from 别名.库名.dbo.表名 insert 库名.dbo.表名 select * from 别名.库名.dbo.表名 select * into 库名.dbo.新表名 from 别名.库名.dbo.表名 go
或直接: select * from OPENDATASOURCE( 'SQLOLEDB', 'Data Source=远程ip;User ID=sa;Password=密码' ).库名.dbo.表名
为避免因服务器不在线造成查询时间过长,可适当调整连接超时: 选中Microsoft SQL Servers-->工具栏,工具-->高级-->连接超时-->改为3000
|