SQL操作太慢怎么办?(100分)

  • 主题发起人 主题发起人 wyw1
  • 开始时间 开始时间
W

wyw1

Unregistered / Unconfirmed
GUEST, unregistred user!
先动态的建一个表
将原来表中的4万条记录移到新建的表中
在将原来表中的记录删除
可是程序象死掉似的
不知应该怎么办


 
不用这么麻烦
1、程序外
可以使用数据转换工具。
2、程序
(1)使用BatchMove就可以完成了。
(2)或者Select * Into 新表名 From 表名 Where ...
 
Insert * Into 新表名 From 表名 Where ...


with Table1 do
begin
Active := False;
EmptyTable;
end;
 
1.INSERT INTO new表名
字段
SELECT 字段 FROM old表名
2.delete from old表名
 
因为我要每个月动态的create 一个表
然后将一个大的表中的一部分数据移到新建的表在中
先creat new table
然后又insert table select * from oldtable where...
最后是delete oldtable where...
可是程序就死掉了
而且如果将要操作的数据量改为几百条,就没问题
 
當然"會死一樣", 數據太大了...
為何要刪除表, 每次清空表不行嗎?
 
在循环里面加入以下代码:

for i := 0 to XXXX do//or while noe Table1.eof do
begin
Application.ProcessMessages;
Label1.Caption := 总几条+'/'+现在第几条;//有东西看了总不会觉的死了,
//但是程序运行速度肯定会慢
//了...
.....
end;
 
为什么要"移"呢?建个索引,或过滤一下,不也可以吗.随便说说.
 
之所以要delete表,是因为只是删除表中的一部分数据,并不是全部
 
跟数据库类型和服务器的能力有关系。这两条语句是最基本的操作,
一般是很快的才对。
 
我想你是不是用SQL数据库?如果是,那么就要注意,假如你用Ttable,这个ttable
连接你要删除的表,并且Active=true。如果是这样的话,用sql语句进行删除记录,
就会出现程序象死掉似。另外,要加快速度,那么就要用存储过程了。
 
先用 Insert * Into 新表名 From 旧表名
然后 query1.Sql.Sql.Text:=delete * from 旧表名
最后 query1.ExecSql
 
可能锁表了
 
用PowerBuilder的PipeLine真的比较方便。
 
另外我想问一下
如果我的程序正在删除或select或insert一批数据
这时我想终止该操作,我想通过在界面上按一个按钮就
可以完成该取消操作可以吗?
 
近期结束
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
835
SUNSTONE的Delphi笔记
S
S
回复
0
查看
765
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部