快速加载数据到文件拆分到表连接id

时间:2012-05-17 13:43:06

标签: mysql file load

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

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

Table1
id|data|data2

Table2
id|table1_id|data3

其中Table2.table1_id是引用Table1.id的外键。

一个实例的MySQL序列看起来像这样

  1. 将文件加载到临时表中
  2. 之后,从临时表插入所需的
  3. 获取最后一个插入ID
  4. 使用此引用标识执行最后一个插入组...
  5. 那太慢了......

    如何使用文件加载到...?有高速结果的任何真实想法吗?

1 个答案:

答案 0 :(得分:0)

您可以暂时将列data3添加到Table1(我还添加done列,以区分来自CSV的记录和已存在/来自其他地方的记录):< / p>

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;