难道就没有更快的办法吗? (50分)

  • 主题发起人 主题发起人 kthy
  • 开始时间 开始时间
K

kthy

Unregistered / Unconfirmed
GUEST, unregistred user!
我将DFW的离线数据库改为SQL Anywhere数据库,letters表中共计有630000多条记录。
1)从MS Access2000将MDB数据库通过ODBC导出到SQLAnywhere,每秒钟约1000条记录;
2)用SQLAnywhere的工具,从一个数据库拷贝到另一个数据库,每秒钟约2200条记录;
3)在Delphi程序中,通过Titan2000接口(这是delphi与SQL Anywhere最好的接口)导入,
每秒钟是20多条记录;
4)而通过delphi自带的TBatchMove,用ODBC连接导入,每秒钟只有8——9条记录。

======================================
3)中的Titan本身处理SQLAnywhere数据库很快,比如查询,比ODBC查询快很多。但好像delphi
没有提供整条记录复制的功能(也许偶是孤陋寡闻),只能逐个字段复制,导致速度过慢。
对于4),通过分析TBatchMove,发现内部实现机制调用了一个BDE的函数,而该函数没有给出源
代码。难道Delphi处理大量记录的插入、复制功能,如此之差,没有其它好办法了吗?
(用TBatchMove时,已经DisableControls,并且,不与任何DataSource相连)。显然速度
慢不完全是ODBC的问题,因为1)中也是通过ODBC连接的。
 
当然了,数据驱动本身处理这些速度当然快了。
对于BatchMove等需要考虑的东西太多了,尤其是各种处理还有出错,速度当然慢了。
 
ado试过吗?比dbe块,你试试吧,我也是凭感觉。
 
据说操作Oracle数据库使用OCI直接操作速度比使用BDE快的多。
我没有做过。
 
to 1122:
因为SQL Anywhere没有提供ADO驱动,同样要通过ODBC进行,我已经试过,
不出所料,比ODBC还要慢!
 
当然了,他又多了一层。[:(]
 
看来……虚心学习!
 
看来没有什么好答案,只能自己解决。散分!◎
 

Similar threads

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