从德尔福2010到远程MySQL 5.09服务器的插入速度极慢,这是一个主要的问题。从Delphi远程插入到远程MySQL数据库的速度非常慢
到目前为止,我曾尝试:用
我用配料和直接插入使用ADO(使用表MySQL的ODBC驱动程序
- ADO访问),并与Zeos我已经使用SQL插入与查询,然后使用表直接模式,并使用applyupdates和提交缓存更新表模式。使用MyDAC我使用表访问模式,然后直接SQL插入,然后批量SQL插入
我试过的所有技术,我设置压缩打开和关闭没有可辨别的差异。
到目前为止,我已经看到了一个全面的相同7.5记录每秒!
现在,我想从这一点来看,假设远程服务器速度很慢,但MySQL Workbench速度非常快,并且迁移工具包可以非常快速地管理初始迁移(说实话,我不记得有多快 - 哪种意味着它很快)
编辑1
速度会更快,我到SQL写入文件,通过FTP上传文件到服务器,然后将它导入直接在远程服务器 - 我想知道他们是否会限制传入的MySQL流量,但这并不能解释为什么MySQL Workbench太快了!
编辑2
在最基本的层面上,代码已经:
while not qMSSQL.EOF do begin qMySQL.SQL.Clear; qMySQL.SQL.Add('INSERT INTO tablename (fieldname1) VALUES (:fieldname1)'); qMySQL.ParamByName('fieldname1').asString:=qMSSQL.FieldByName('fieldname1').asString; qMySQL.ExecSQL; qMSSQL.Next; end;
我又试图
qMySQL.CachedUpdates:=true; i:=0; while not qMSSQL.EOF do begin qMySQL.SQL.Clear; qMySQL.SQL.Add('INSERT INTO tablename (fieldname1) VALUES (:fieldname1)'); qMySQL.ParamByName('fieldname1').asString:=qMSSQL.FieldByName('fieldname1').asString; qMySQL.ExecSQL; inc(i); if i>100 then begin qMySQL.ApplyUpdates; i:=0; end; qMSSQL.Next; end; qMySQL.ApplyUpdates;
现在,这个代码与
CachedUpdates:=False
(这显然从来没有真正写回到数据库)速度快得要命!坦率地说,我认为这是连接 - 我感觉这是连接...只是等待他们回到我身边!
感谢您的帮助!
如果您显示您的代码,检测您的瓶颈将非常有帮助 – 2010-04-30 15:46:10
如果您使用本地服务器,插入速度有多快?也许这是一个与运输有关的问题(连接速度慢)。 – mjn 2010-04-30 16:40:36
您的代码不正确。设置循环外部的SQL代码*,然后调用Prepare。在循环内只分配参数并执行,否则会失去参数的优点。在循环之外明确地开始一个事务,并在最后提交。 CachedUpdates设置为False意味着数据直接转到数据库,并且不会在本地缓存。不要使用CachedUpdates,它们不是为了速度。 – 2010-05-04 12:15:31