删除数据时间太长
编号:QA002143
建立日期: 1999年12月2日 最后修改日期:2003年8月2日
所属类别:
Q
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编制的程序最快速度也在半个小时以上,而且一旦死机后再重新启动,总出现提示说不能连接数据库,如此得反复五六次才行。
请问如何加快程序的执行速度和程序的安全性?
A回答:
将删除程序作成存储过程来执行。
导入文件时,将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。
| |
|
|
| |
|
|