从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