我有超过 5 亿条记录的数据,在一个包含 2 个字段的文件中,blob
和 c_id
。
还有两个其他格式的具有相同数据的文件: 具有 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 使事情变得复杂。
例如
# 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
最佳答案
我不确定您是如何填充 table_b 的“c_id”字段的,但是您可以这样做: 首先加载 table_a 中的所有数据,然后通过执行批量查询加载 table_b,例如:
“SELECT id into outfile '/tmp/file1.csv' FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n' from table_a where id > 0 limit 100000"
并在“/tmp/file1.csv”上使用加载文件。
关于MySQL:将一个文件的数据插入到两张表中,一张带有auto_increment id,一张连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4966930/