数据量大用什么技术把数据量大的表中数据倒走
我用pb7.0 数据库sql2000 数据库中有几个表的数据量太大 查询也影响速度 我想到年底把该年的数据删掉 但客户也可能查询以前的数据 我必须把数据倒走在删掉。 我用数据窗口按条件读出数据 倒入另一个表里 但数据量太大总死机,用存储过程行吗?或者别的方法?如果有别的方案,请各位大拿指教 问题点数:50、回复次数:11Top
1 楼PHDYCN(飘忽的云)回复于 2005-08-04 19:50:12 得分 0
你在后台数据库中重新建一个历史表 把不用的数据导过去就行了 用户要查历史记录的 你建一个连历史表的数据窗口,让他们查就是了Top
2 楼deWolf(逻辑之狼)回复于 2005-08-05 08:48:52 得分 0
用cursor吧,占内存很小,8过可能比datawindow慢一点,
大概就是下边这样子
///////////////////////////////////////////
int v_id
string v_a,v_b,v_c
declare c_move cursor for
select id,a,b,c from [table1] where ...
open c_move;
fetch c_move into :v_id, :v_a, :v_b, :v_c;
do while sqlca.sqlcode=0
// find one
insert into [table2] (id,a,b,c) values (:v_id, :v_a, :v_b, :v_c)
// try next
fetch c_move into :v_id, :v_a, :v_b, :v_c;
loop
close c_move;
Top
3 楼deWolf(逻辑之狼)回复于 2005-08-05 08:51:17 得分 0
导到第2张表后,
把第一张表中的相关项目删掉,
用户搜索就去分段查询把Top
4 楼dancer(似水流年)回复于 2005-08-05 09:19:43 得分 0
做一个历史表就行了
可以用pipeline导,这个比较快Top
5 楼j9dai(翔)(DoItNow)回复于 2005-08-05 09:35:12 得分 0
用楼上的法子吧Top
6 楼wfw640(宇宙小子)回复于 2005-08-07 10:31:14 得分 0
想省事就用数据管道吧!Top
7 楼eshowsoft(易秀科技)回复于 2005-08-14 03:47:41 得分 0
呵呵,没有做过大系统吧!
这样的东东是要用两个数据库来实现的,第一个是每次进入系统时,控制整个系统有个数据库,第二你在每一年要建一个年历表,让客户在查询的时候去选择要执行那行查询,就得要连接第二个数据库,这样就可以了。不用去倒来倒去的,建一个作业去自动执行,这样不管是10年8年,都不用管了。不过要想收服务费就不能这样做了。知道吗?呵呵!Top
8 楼eshowsoft(易秀科技)回复于 2005-08-14 03:49:29 得分 0
有不详的,想写大系统的加我,QQ185827426Top
9 楼lzheng2001(1加1)回复于 2005-08-14 13:09:16 得分 0
如果数据量实在是很大的话,建议用分批导入的方法,做一个数据窗口,
select top 5000 ... form 表
做两个相同的datastore,或者dw
代码
ds_1.settransobject(sqlca)
ds_1.retrieve()
ds_2.settransobject(uo_trans)
ds_2.object.data = dw_1.object.data
if ds_2.update() = 1 then
// 删除ds_1的所有行 //这里可以用循环,也可以对整个DW缓冲区操作,
// 也可以试试在上面用rowsmove
if ds_1.update() = 1 then
commit;
end if
rollback;
end if
Top
10 楼lzheng2001(1加1)回复于 2005-08-14 13:11:04 得分 0
改一下
if ds_2.update() = 1 then
// 删除ds_1的所有行 //这里可以用循环,也可以对整个DW缓冲区操作,
// 也可以试试在上面用rowsmove
if ds_1.update() = 1 then
commit;
end if
end if
rollback;
Top
11 楼cwel()回复于 2005-08-14 13:11:12 得分 0
数据管道是不二的选择Top




