我正在尝试将大量用户插入到具有两个表的 MySQL 数据库中:
第一个表包含用户数据。一个例子INSERT
看起来像这样(id
是主键,mail
是唯一的键):
INSERT INTO users (id, mail, name)
VALUES (NULL, "[email protected] /cdn-cgi/l/email-protection", "John Smith")
ON DUPLICATE KEY UPDATE name = VALUE(name)
第二个表包含用户所属的组。它只存储两个外键users_id
and groups_id
。示例查询如下所示:
INSERT INTO users_groups (users_id, groups_id)
VALUES (LAST_INSERT_ID(), 1)
此设置非常适合小型数据集。当我导入大量数据(>1M 行)时INSERT
速度变慢了。显然,批量插入会更好:
INSERT INTO users (id, mail, name)
VALUES (NULL, "[email protected] /cdn-cgi/l/email-protection", "John Smith"), (NULL, "[email protected] /cdn-cgi/l/email-protection", "Anna Smith")
ON DUPLICATE KEY UPDATE name = VALUE(name)
and:
INSERT INTO users_groups (users_id, groups_id)
VALUES (LAST_INSERT_ID(), 1), (LAST_INSERT_ID(), 4)
问题当然是,LAST_INSERT_ID()
只返回批次的一个(第一个)idINSERT
.
所以,我需要的是一个“嵌套”批次INSERT
,IMO 在 MySQL 中不存在。
我能做些什么来让我的INSERT
更快吗?