0

拥有一个使用 InnoDB 和外键的 MySQL 数据库...

我需要从一个巨大的 CSV 文件中导入 100MiB 的数据并将其拆分为两个表,并且记录必须如下所示

表格1
id|数据|数据2

表2
id|table1_id|data3

Table2.table1_id外键引用在哪里Table1.id

一个实例的 MySQL 序列如下所示

  1. 将文件加载到临时表中
  2. 之后从临时表插入到所需的
  3. 获取最后一个插入 ID
  4. 使用此参考 ID 执行最后一个插入组...

那真是太慢了……

如何使用文件加载到...中来做到这一点?任何具有高速结果的真实想法?

4

1 回答 1

0

您可以临时添加列data3Table1我还添加了一个done列来区分源自 CSV 的记录与那些已经存在/源自其他地方的记录):

ALTER TABLE Table1
  ADD COLUMN data3 TEXT,
  ADD COLUMN done BOOLEAN DEFAULT TRUE;

LOAD DATA
  INFILE '/path/to/csv'
  INTO TABLE Table1 (data, data2, data3)
  SET done = FALSE;

INSERT
  INTO Table2 (table1_id, data3)
  SELECT (id, data3) FROM Table1 WHERE NOT done;

ALTER TABLE Table1
  DROP COLUMN data3,
  DROP COLUMN done;
于 2012-05-17T13:59:29.873 回答