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连接的。
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连接的。