CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  PowerBuilder >  DataWindow

数据量大用什么技术把数据量大的表中数据倒走

楼主wsygt(ygt)2005-08-04 18:21:48 在 PowerBuilder / DataWindow 提问

我用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

相关问题

  • ?? 请问高手:对于数据量大的表该如何建 ??
  • BCB数据库各种表格的容量大小
  • 关于数据量大时报表的处理情况
  • 数据量大的问题
  • 数据量大的表转移到另一个表中有什么好的方法?
  • 关于OPENQUERY数据量大的问题?
  • 请教数据库多表(3表)联合操作的问题:数据量大会引起程序假死!该如何解决!
  • 先新年快乐,恭喜发财! 问:面对一个量大的表(循环无法解决问题),要将其中的数据统计Count(*)和Sum(字段)。
  • asp.net(c#)技术中:从表单提取数据,往数据库里插入新数据,怎么整?(在线等)
  • 数据量大用Grid时出现的问题!!

关键词

  • 数据
  • 数据库
  • 查询
  • ds
  • 历史
  • 系统
  • 表
  • 删掉
  • dw
  • move

得分解答快速导航

  • 帖主:wsygt

相关链接

  • PowerBuilder类图书
  • PowerBuilder类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo