【问题标题】:How to upload large amounts of data from MsSQL datatable to MySQL datatable, daily fast?如何将大量数据从 SQL 数据表上传到 MySQL 数据表,每天都快?
【发布时间】:2021-07-23 16:27:24
【问题描述】:

我需要每天将 cca 770_000 数据行从一个 MsSQL 数据表上传到另一个 MySQL 数据表。 我写了一个小程序,第一步删除 MySQL 数据表,然后循环遍历 MsSQL 记录集,并将每一行逐步插入 MySQL 表中。

但是对于这么多的数据,需要很长的时间……

您有任何加快此任务的提示或任何其他解决方案吗?

【问题讨论】:

  • 你应该使用批量插入来减少执行时间。

标签: mysql sql-server database etl data-migration


【解决方案1】:
  1. 从 MSSql 转储到逗号或制表符分隔的文件。
  2. (在 MySQL 上)CREATE TABLE t (...);
  3. LOAD DATA INFILE INTO t ... -- 不影响“真实”表
  4. RENAME TABLE real TO old, t TO real; -- 原子且快速
  5. DUMP TABLE old; -- 清理

这种技术会

  • 以最快的速度执行任务。
  • 当表在 MySQL 上丢失时,没有时间。 (优于TRUNCATE。)

【讨论】:

    【解决方案2】:

    此任务通常称为提取-转换-加载。 。 你没有给我们很多细节。所以很难给出具体的答案。

    清洁工作流的最佳选择是从源服务器(在您的情况下为 SQL Server)读取表并写出.csv file。如果您能找到一个完全调试的工具或库来编写最好的 .csv 文件:众所周知,编写正确的 .csv 文件比看起来要困难得多。您可以配置 SSIS 来为您完成这部分任务。

    然后您可以使用 MySQL 的 LOAD DATA INFILE command 来读取该 csv 文件。该命令专为您的目的而构建,而且速度惊人。

    顺便说一下,在加载表格之前不要删除并重新创建表格。 TRUNCATE 它。这告诉数据库服务器您希望对新数据使用相同的表定义。

    如果您出于某种原因必须在程序中逐行处理数据,快速插入多行的诀窍是:在大约 100 行的事务批次中进行插入.两种方法:

    1. 像这样编写您的 INSERT 语句,每个语句大约 100 行。

      INSERT INTO tbl (col1, col2, col3) VALUES
      (1,2,3),
      (4,5,6),
      (7,8,9); 
      
    2. 使用explicit transactions,在START TRANSACTIONCOMMIT 中包装每批大约100 个INSERT 语句。像这样的

      START TRANSACTION;
      INSERT INTO tbl (col1, col2, col3) VALUES (1,2,3);
      INSERT INTO tbl (col1, col2, col3) VALUES (4,5,6);
      INSERT INTO tbl (col1, col2, col3) VALUES (7,8,9);
      COMMIT;
      

    市场上有 ETL 软件包。但其中许多功能太多,难以使用。

    【讨论】:

      猜你喜欢
      • 2017-11-07
      • 1970-01-01
      • 2012-09-29
      • 2021-06-12
      • 2017-05-25
      • 1970-01-01
      • 1970-01-01
      • 2018-11-16
      • 1970-01-01
      相关资源
      最近更新 更多