mysql - 从 MS SQL 向 MySQL 插入大量行的最有效方法是什么?

标签 mysql sql-server

我需要每天将大量行从 SQL Server 数据库传输到 MySQL 数据库 (MyISAM)。我将 MySQL 实例设置为链接服务器。

我有一个简单的查询,它返回需要传输的行。行数将增长到大约 40,000 行,每行只有 2 个 char(11) 列。这应该相当于大约 0.8MB 的大小。 SELECT 查询的执行时间可以忽略不计。我将在每天插入记录之前截断 MySQL 表。

我在 MySQL 链接服务器中使用 INSERT...SELECT 查询来执行插入。对于 40,000 行,大约需要 40 秒。为了查看将那个数量的行从一个 MySQL 表移动到另一个表需要多长时间,我从 MSSQL 执行了一个远程查询,结果用了将近 1 秒。

在查看 SSMS 中的执行计划时,我看不到很多内容,但看起来好像正在为每一行执行 INSERT 语句,而不是插入所有行的单个语句。

我可以做些什么来提高性能?如果发生这种情况,有什么方法可以强制在单个语句中将行插入到 MySQL 中吗?

最佳答案

LOAD DATA INFILE在 MySQL 中比 INSERT 快得多。如果您可以将 MS SQL 服务器设置为输出临时 CSV 输出文件,则可以使用命令行 mysqlimport 将其拉入 MySQL。工具,或在 MySQL SQL 语句中使用 LOAD DATA INFILE。

关于mysql - 从 MS SQL 向 MySQL 插入大量行的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3372637/

相关文章:

php - 使用 PDO 命令插入数据库

php - 尝试在 sql 查询中回显一些内容

php - 针对预定义的数字运行 while 循环(以执行查询)

sql-server - SQL Server 2000 与 2005+ 示例数据库来研究数据库设计?

sql-server - 使用 IF IsNumeric 作为参数

php - 在 Magento 中使用函数就是向带有函数的过滤器添加反引号。有没有什么好办法让MySQL的这些功能发挥作用呢?

mysql - 根据外部表过滤结果

sql - 在SQL Server中创建临时表是否需要使用#?

sql-server - 继续获取 'cursor is READ-ONLY'

sql - T-SQL 如何匹配多行