我在包含2个字段blob
和c_id
的文件中获得了包含500M +记录的数据。
还有另外两个文件在其他格式中具有相同的数据: 具有90M唯一blob的文件。 带有blob的文件,以及每个记录的逗号分隔的c_id列表。
我有两张桌子:
table_a: [id, blob] # id is auto-increment
table_b: [a_id, c_id]
对于每个唯一的blob,必须创建table_a中的记录。对于文件中的每个记录,必须使用table_a的相应外键创建table_b中的记录。
我现在使用的解决方案是使用last_insert_id
生成插入语句,但速度太慢。我更喜欢使用LOAD DATA INFILE,但是自动增量ID会让事情变得复杂。
e.g。
# 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
答案 0 :(得分:0)
我不确定你是如何为table_b填充“c_id”字段的,但你可以这样做: 首先加载table_a中的所有数据,然后通过执行批量查询来加载table_b,如:
“SELECT id into outfile”/tmp/file1.csv'FIELDS TERMINATED BY';'从table_a'\ n'终止的行,其中id> 0限制100000“
并在'/tmp/file1.csv'上使用load infile。