大批量、多条记录插入如何加快速度(50分)

  • 主题发起人 主题发起人 yubo
  • 开始时间 开始时间
Y

yubo

Unregistered / Unconfirmed
GUEST, unregistred user!
一个汇总集合的程序,需在客户端计算统计7000~12000记录
存入后台数据库,我现在计算一条Insert一条太慢
是否有快速方法?
 
你应该查一下你慢的原因是在哪一步,还有你的代码。
 
用存储过程吧,具体如何做,我也不太会,但确实会提高速度。
 
要是统计后要用户输入或修改的话,用存储过程不是很好处理,
要是只是统计后在客户端显示,客户确认后保存的话,用存储过程
是个好建议,它可以用一条Insert Into (...) Select ...语句实现
批量插入,效率很高。
 
用存储过程确实会提高速度,但并不理想。我的方法是;
分批汇总后写入临时Table(最好作成Schedule),你的
汇总程序从临时Table读数据。
 
menxin:
我慢在插入数据时.
追命:
存储过程好象不能提高我的速度.(至少我不会)

DSM2000:
我的数据计算复杂,不能
Insert Into (...) Select ...
wumeng
我读数据和写数据的速度还可以.(方法和你类似)
'Schedule'什么意思?

我的速度主要慢在 insert 语句执行后等待的时间.
是否有插入数据不等待,或等待时间短的方法?
请大家多帮忙,谢谢!!

 
我建议你把代码和问题都写好,然后到大富翁排行榜上找 沈前卫 ... 之大虾发个邮件他们就可以帮你解决问题
 
MS SQL 7 中的'bulk insert'专门用来大量插入,速度很快
mysql 也有类似的语句
 
hpretty:
是个好办法
lxdufo:
我用Oracle8,不只有否好办法。
 
>>我的速度主要慢在 insert 语句执行后等待的时间.

那就太容易解决了,把50-100条sql语句放到query中,一次执行,
速度即提高50-100倍!(但不能把所有sql都写进去哟!)

query1.sql.clear;
while ....
begin
query1.sql.add(yousql);
if query1.sql.count>=100 then
begin
query1.execsql;
query1.sql.clear;
end;
end;
if query1.sql.count>0 then //不要忘了最后这一段
query1.execsql;

我的程序都是这样做的。
 
温柔一刀:
你是说
>>query1.sql.clear;
>>while ....
>>begin
>> query1.sql.add(yousql);
>> if query1.sql.count>=100 then
>> begin
>> query1.execsql;
>> query1.sql.clear;
>> end;
>>end;
你的意思是不是每100条执行一次?
 
如果单单追求速度的话,用MICROSOFT的DTS倒是个不错的选择。
 
程旭:
DTS是什么东东?
 
to yubo:就是这个意思,

另外,你在插入前,最好starttransaction,
全部完成后,commit,那样速度还会快很多。
 
to 温柔一刀:
谢谢!
 
to 温柔一刀:
每条SQL语句之间用什么间隔?
 
用Table的append试试。
 
to 温柔一刀:
我两天来在试,也问了一些人,但好像不能一次执行多条SQL语句.
但我在Oracle数据库可以执行多条SQL语句!
请指教!
 
>>我两天来在试,也问了一些人,但好像不能一次执行多条SQL语句

恕我直言,你问的这些人恐怕不太灵光 :-)
除了select,其他语句(insert/update/delete)都可以一次执行多条。
 

Similar threads

S
回复
0
查看
835
SUNSTONE的Delphi笔记
S
S
回复
0
查看
765
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部