从Delphi到远程MySQL数据库的插入速度极慢
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了从Delphi到远程MySQL数据库的插入速度极慢,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1979字,纯文字阅读大概需要3分钟。
内容图文
从Delphi 2010到远程MySQL 5.09服务器的插入速度非常慢,这是一个主要的问题.
到目前为止,我已经尝试过:
>使用MySQL ODBC驱动程序的ADO
> Zeoslib v7 Alpha
> MyDAC
我已经使用ADO进行批处理和直接插入(使用表访问),并且使用Zeos将SQL插入用于查询,然后使用表直接模式,还使用applyupdates和commit缓存了更新表模式.使用MyDAC时,我使用表访问模式,然后直接执行SQL插入,然后批量执行SQL插入
我尝试过的所有技术,都启用和禁用压缩,没有明显区别.
到目前为止,我已经看到了每秒7.5条记录的几乎相同的结果!!!
现在,从这一点来看,我假设远程服务器运行缓慢,但是MySQL Workbench的运行速度非常快,并且Migration Toolkit可以非常快速地管理初始迁移(说实话,我不记得有多快?表示速度很快)
编辑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的代码中(显然从来没有实际写回数据库),速度非常快!
老实说,我认为这是联系-我觉得这是联系…等待他们回到我身边!
感谢你的帮助!
解决方法:
您在使用查询参数吗?最快的插入方式应该是使用普通查询和参数(即INSERT INTO表(字段)VALUES(:field)),准备查询,然后分配参数,并在单个事务中执行所需次数的事务-最后提交(不要使用任何类型的自动提交)
在大多数数据库中,这避免了每次执行查询时的硬解析,这需要时间.参数只允许查询解析一次,然后根据需要重新执行多次.
使用服务器功能来检查正在发生的事情-许多提供了一种检查正在运行的语句正在执行的方式.
内容总结
以上是互联网集市为您收集整理的从Delphi到远程MySQL数据库的插入速度极慢全部内容,希望文章能够帮你解决从Delphi到远程MySQL数据库的插入速度极慢所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。