我有两个表,一个链接到其他的主键。 在我插入到表A中的时刻,得到了LAST_INSERT_ID,然后再插入到表B.
但是,我有数以百计的记录插入,我要加快速度。
在MySQL中,您可以:
INSERT INTO table_a (v1, v2, c3) VALUE (0, 1, 2);
INSERT INTO table_a (v1, v2, v3) VALUE (4, 5, 6);
等,或
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);
经过一番深入调查却显示为SP不会提供显著的速度提升,并且不能接受批量参数,如INSERT INTO
MySQL的存储过程与复杂的查询
但我仍然需要一个插入相当多的链接的记录,所以我做了以下内容:
INSERT INTO一个(X,Y)VALUES(1,2),(3,4),(5,6),...(N-1,N)
ID = GET_LAST INSERT_ID
ID范围从ID为ID + N只要我们使用InnoDB表:
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从复制的增量递增。