MySQL: вставка данных из одного файла в две таблицы, одна с идентификатором auto_increment и одна таблица соединения - PullRequest
1 голос
/ 11 февраля 2011

У меня есть данные с 500M + записями, в файле с 2 полями, blob и c_id.

Есть также два других файла с такими же данными в других форматах: Файл с90M уникальных капель.Файл с большим двоичным объектом и разделенный запятыми список c_ids для каждой записи.

У меня есть две таблицы:

table_a: [id, blob] # id is auto-increment
table_b: [a_id, c_id]

Для каждого уникального большого двоичного объекта запись в table_a должна бытьсоздано.Для каждой записи в файле должна быть создана запись в table_b с соответствующим внешним ключом для table_a.

Решение, которое я сейчас использую, состоит в том, чтобы генерировать операторы вставки, используя last_insert_id, но это слишком медленно.Я бы предпочел использовать LOAD DATA INFILE, но идентификатор автоинкремента усложняет задачу.

например

# Raw data
c_id   blob
   1   aaaa
   2   aaaa
   3   aaaa
   3   aaab
   4   aaac

Желаемый вывод:

# Table_a
id  blob
 1  aaaa
 2  aaab
 3  aaac

# Table_b
c_id a_id
   1    1
   2    1
   3    2
   3    2
   4    3

1 Ответ

0 голосов
/ 11 февраля 2011

Я не уверен, как вы заполняете поле "c_id" для table_b, но вы можете сделать что-то вроде этого: сначала загрузить все данные в table_a, а затем загрузить table_b, выполнив пакетные запросы, например:

"ВЫБЕРИТЕ ИД в выходной файл" /tmp/file1.csv 'ПОЛЯ, ПРЕКРАЩАЕМЫЕ'; 'ЛИНИИ, ПРЕКРАЩАЕМЫЕ '\ n' из таблицы table_a, где id> 0 limit 100000 "

и с использованием load infile в /tmp/file1.csv.

...