0

InnoDBと外部キーを使用するMySQLデータベースを持っている...

巨大なCSVファイルから100MiBのデータをインポートし、それを2つのテーブルに分割する必要があり、レコードは次のようになっている必要があります

表1
id | data | data2

表2
id | table1_id | data3

Table2.table1_idを参照する外部キーはどこにありますかTable1.id

1つのインスタンスのMySQLシーケンスは次のようになります

  1. ファイルを一時テーブルにロードします
  2. その後、一時テーブルから必要なものに挿入します
  3. 最後の挿入IDを取得します
  4. この参照IDを使用して最後の挿入グループを実行します。

それは完全に遅いです...

ファイルの読み込みを使用してこれを行うにはどうすればよいですか...?高速な結果をもたらす本当のアイデアはありますか?

4

1 に答える 1

0

一時的に列data3を追加できます ( CSV に由来するレコードと、既に存在する/他の場所に由来するレコードを区別するためTable1の列も追加します):done

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 に答える