delphi连接mysql速度慢_从Delphi到远程MySQL数据库的插入速度极慢

从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)),准备查询,然后分配参数,并在单个事务中执行所需次数的事务-最后提交(不要使用任何类型的自动提交)

在大多数数据库中,这避免了每次执行查询时的硬解析,这需要时间.参数只允许查询解析一次,然后根据需要重新执行多次.

使用服务器功能来检查正在发生的事情-许多提供了一种检查正在运行的语句正在执行的方式.

标签:mysql,delphi

来源: https://codeday.me/bug/20191106/2000167.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值