热情软件屋

 

删除数据时间太长


编号:QA002143
建立日期: 1999年12月2日 最后修改日期:2003年8月2日
所属类别:

luo xuan:
    操作系统:win95
    编程工具:PowerBuilder6.5
    问题:有一个对我来说很难解决的问题:目前我的数据库中有一个表(共含12个列),其中将进有17万条记录,每月需要全部更新一次。方法是全部删除掉后再重新输入。这是一个单机版程序,开发工具是PB6.5 和其自带的SQL ANYWHERE数据库。
    更新方法是先全部删除,删除库使用语句 delete from e_m; (e_m为表名),时间为8分钟,且完成后经常出现死机现象。然后导入文本文件(每个TXT文件含一万条记录,共17个TXT文件)。时间为20分钟。以前该程序为VFP5.0开发,从删除到全部导入不超过10分钟。
    目前pb编制的程序最快速度也在半个小时以上,而且一旦死机后再重新启动,总出现提示说不能连接数据库,如此得反复五六次才行。
    请问如何加快程序的执行速度和程序的安全性?

回答:

    将删除程序作成存储过程来执行。
    导入文件时,将tempdb适当加大。
    
    luo xuan又问
    我按你的答案进行操作,还是数据库老是挂不上,提示:database engine not running.(当库中记录数不超过40,000时不出现任何问题,大于100,000时每次必出现错误)该如何处理?又我使用的是SQL ANYWHERE数据库,请问您所说的tempdb在哪里?如何加大?
    panda回答:
    1、tempdb是sybase的数据库,在SQL ANYWHERE中没有
    2、SQLANYWHERE只是一个规模很小的本地数据库,它有很多的不足。如果数据量比较小可以使用SQL ANYWHERE,但一旦数据量变大就会出现你所遇到的问题。因此,就你的数据量来看,我建议你使用远程的Sybase数据库。如果一定要使用本地库,也应该使用sybase驱动的本地数据库,而不是SQL ANYWHERE。
    3、还有一种处理方法:不要将所有数据都放在一个表中,可把旧的数据放在其它的表中,剩下比较新的数据放在一个表中。
    
    东方神鹰的意见:
    如果您真正对存储过程了解,就知道对于一个delete from ..命令而言,用存储过程是没有任何用处的,我有一个让您在不到一秒钟完成删除的办法:
    string ls
    ls='drop table e_m'
    execute immediate :ls;
    ls='create table e_m.........'//字符串内为创建表的命令
    execute immediate :ls;
    至于您所讲的txt文件数据倒入的加速,请问您的txt文件是什么格式。用何种方式倒入?
    至于您的死机问题,很简单:学会运用sqlca.autocommit=true 和sqlca.autocommit=false即可。
    
    你的眼神的意见:
    要执行execute immediate :ls
    必须把
    sqlca.autocommit=true 设定才行.
    
    黑羽的意见:
    删除table可以使用TRUNCATE TABLE name。

此问题由panda回答。

附加关键字:编程, 源程序, programming, source code, Power Builder, PB, sybase, 数据库, database, query

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio