我已经读取了存储大量数据的SQL Server数据库。每天晚上,我从这个数据库的表中提取大约一百万行,然后将它放在我本地机器上的MySQL数据库中,然后在那里对数据进行分析。我目前复制这些数据的方法是Perl脚本,基本上可以:
(1) Connect to MySQL database
(2) Drop old table
(3) Create table.
(4) Get data from SQL Server DB.
(5) Put data on MySQL database using the following method:
while (@data = $sth->fetchrow_array()) {
$id = $data[0];
$at = $data[1];
$ar = $data[2];
$dt = $data[3];
$v = $data[4];
$di = $data[5];
#PUSH ONTO MYSQL
$dbh2->do("INSERT INTO datatable VALUES (?, ?, ?, ?, ?, ?)",
undef, $id, $at, $ar, $dt, $v, $di);
}
这很慢。考虑到我对远程SQL服务器的有限权限,是否有一种复制这些数据的方法会更快? (有人建议创建一个链接服务器,但我不认为我可以在远程服务器上没有更多的管理员角色)。在未来,我可能不得不使用更大的数据集,因此找出更快的方法将是理想的。
值得注意的是:我每晚都会从远程服务器复制整个日期范围,即使它在技术上只更新了最近一天的数据。但是,之前日期的某些数据可能会在以后更改,这就是为什么我们认为每次复制整个事情都是谨慎的。这显然是使它变慢的部分原因。有没有办法每晚只复制更改?
仅供参考我的工作机器正在运行Windows 7而我正在使用MySQL 5.7
答案 0 :(得分:1)
根据dev.mysql.com LOAD DATA INFILE比INSERT快20倍。这意味着使用Perl脚本写入文本文件并使用该信息执行LOAD DATA INFILE会快得多。