首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据从TADOTable批量移动到MySQL TMyTable

将数据从TADOTable批量移动到MySQL TMyTable
EN

Stack Overflow用户
提问于 2012-12-19 03:34:08
回答 1查看 1.3K关注 0票数 0

我正在尝试导入一个表从一个旧的数据库(MS Access)到MySQL服务器使用CRBatchMove使用Delphi2007。

该程序通过ODBC连接从遗留数据库获取数据,并使用TADOTable.SaveToFile()将其存储在本地硬盘驱动器上。程序的第二部分将该文件读取到另一个TADOTable中,并使用TCRBatchMove将其传输到MySQL服务器(通过DevArt的TMyTable)。在此过程中,由于某些原因,批处理移动似乎非常慢。

以下试验中的数据量约为100,000条记录,每个记录约有120个字段。大多数字段是integers和VARCHAR (每个VARCHAR少于32个字符)。

我获得的性能数据如下:

代码语言:javascript
复制
Time taken to bring data to local file over ODBC connection: 17 seconds
Time taken to load data from local file into TADOTable: 3 seconds
Time taken by TCRBatchMove to move data from TADOTable to TMyTable: > 30 minutes

MySQL服务器在本地的开发机器(i7-2.8 the )上运行,另外数据库也非常快)。

为什么批量移动将数据推送到MySQL服务器会如此缓慢。有没有办法加速这项任务?或者,有没有更好的方法来实现这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-20 01:36:13

不是一个真正的答案,但我的评论空间快用完了。

MySQL有一个名为load data infile的函数

请参阅:http://dev.mysql.com/doc/refman/5.1/en/load-data.html

您可以使用它来计算插入数据的最快时间。这将为您提供插入MySQL的基准时间,并允许您确定延迟是在MySQL中还是在Delphi中。如果你有TMyTable的源代码,你也可以使用分析器。

另一种选择是从以下位置下载ZEOS数据访问组件:

http://sourceforge.net/projects/zeoslib/

如果您正在使用的组件中存在一些混乱,那么更改工具集可能会解决问题。(Devart的组件通常都很优秀)。

在MySQL端,您可以在大容量插入之前禁用索引更新,在大容量插入之后启用索引。如果你有很多的插入,这通常会更快的工作。

请参阅:https://stackoverflow.com/a/9524988/650492

代码语言:javascript
复制
SET autocommit=0; 
SET unique_checks=0; 
SET foreign_key_checks=0;

your insert here

SET autocommit=1; 
SET unique_checks=1; 
SET foreign_key_checks=1;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13940154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档