Mic*_*nze 6 mysql stored-procedures insert last-insert-id
我有两个表,一个链接到另一个的主键.目前我插入表A,获取LAST_INSERT_ID,然后INSERT到表B.
但我有数百条记录要插入,我想加快速度.
在Mysql中你可以:
INSERT INTO table_a (v1, v2, c3) VALUE (0, 1, 2);
INSERT INTO table_a (v1, v2, v3) VALUE (4, 5, 6);
Run Code Online (Sandbox Code Playgroud)
等等,或
INSERT INTO table_a (v1, v2, v3) VALUE (0, 1, 2), (4, 5, 6), etc 更快地添加多个条目 - 但仅适用于一个表.
当然后者要快得多.我想知道是否可以使用存储过程为两个链接表复制此行为,以及它是否会在性能上有类似的显着改进:
类似于:调用special_insert((0,1,2),(4,5,6)等); 或类似的.
我没有存储过程经验,所以我正在寻找继续前进的方向.
下面是一个存储过程的示例,其中包含两个表插入,包括Last_Insert_ID().
DELIMITER //
CREATE PROCEDURE new_person(
first CHAR(35), last CHAR(35), email CHAR(255), tool_id INT)
BEGIN
START TRANSACTION;
INSERT INTO person(firstname, lastname, email)
VALUES(first, last, email);
INSERT INTO tasks (engineer_id, tool_id)
VALUES(LAST_INSERT_ID(), tool_id);
COMMIT;
END//
DELIMITER ;
CALL new_person('Jerry', 'Fernholz', 'me@somewhere.com', 1);
Run Code Online (Sandbox Code Playgroud)
经过进一步调查后,似乎 SP 不会提供显着的速度改进,并且无法接受批量参数,例如 INSERT INTO
但我仍然需要在其中插入相当大量的链接记录,因此我执行了以下操作:
插入 (x, y) 值 (1,2), (3,4), (5,6), ... (N-1, N)
id = GET_LAST INSERT_ID
只要我们使用 InnoDB 表,ids 的范围就从 id 到 id+N:
MySQL LAST_INSERT_ID() 与多记录 INSERT 语句一起使用
MySQL LAST_INSERT_ID() 与多记录 INSERT 语句一起使用
http://gtowey.blogspot.com/2012/02/multi-insert-and-lastinsertid.html
进而
INSERT INTO b (a_id, z) VALUES (id,2), (id+1,4), (id+2,6), ... (id+N, 11) 唯一的问题是你需要知道你的mysql复制增量。
| 归档时间: |
|
| 查看次数: |
24193 次 |
| 最近记录: |