我需要每天将大量行从SQL Server数据库传输到MySQL数据库(MyISAM)。我将MySQL实例设置为链接服务器。
我有一个简单的查询,它返回需要传输的行。行数将增加到大约40,000行,每行只有2个char(11)列。这相当于大约0.8MB。 SELECT查询的执行时间可以忽略不计。我会在每天插入记录之前截断MySQL表。
我正在使用INSERT ... SELECT查询到MySQL链接服务器来执行插入。 40,000行需要大约40秒。要查看将一定数量的行从一个MySQL表移动到另一个MySQL需要多长时间,我从MSSQL执行了一个远程查询,并且接近1秒。
我看不出SSMS中执行计划的内容有多少,但似乎正在为每一行执行INSERT语句,而不是单个语句来插入所有行。< / p>
我可以做些什么来改善表现?有什么方法可以强制行在一个语句中插入MySQL,如果这是正在发生的事情?
答案 0 :(得分:3)
LOAD DATA INFILE在MySQL中比INSERT快得多。如果您可以设置MS SQL服务器以输出临时CSV输出文件,则可以使用命令行mysqlimport工具或MySQL SQL语句中的LOAD DATA INFILE将其拉入MySQL。
答案 1 :(得分:1)
问题是您选择的表位于本地服务器上,而您要插入的表位于远程服务器上。因此,链接服务器必须将每一行转换为MySQL服务器上的INSERT INTO Table (Field1, Field2) VALUES ('VALUE1','VALUE2')
或类似行。你可以做的是在SQL服务器的每一行上保持校验和。您可以简单地删除并重新插入已更改的记录和新记录,而不是截断并重新插入整个表。除非您的大多数记录每天都在更改,否则这应该会减少您必须转发的数据量,而不必混淆导出和重新导入文本文件。
答案 2 :(得分:0)
我不确定这是否会让它更快,但批量下载和上传将是替代方案。
在mySQL端你可以做一个LOAD DATA INFILE
不知道如何在SQL Server端卸载它,但可能有类似的东西。
答案 3 :(得分:0)
转储到文件中,然后转到用户LOAD DATE INFILE
来自文件的数据插入更快