当将多个行作为单个语句插入时,什么时候自动提交?

时间:2019-05-21 07:44:12

标签: mysql sql-insert

我在向表中插入约50000行的性能方面存在一些问题。作为一种优化,建议显式启动事务,以避免在每一行上提交。但是,我将所有行插入一个语句中,而不是50000个语句中。

所以我想知道,当AUTOCOMMIT模式打开时,当我在单个语句中插入很多行时,什么时候会发生提交-毕竟要插入50000行,或者将每行添加到表中之后。

换句话说,这是下面的代码

INSERT INTO mytable (col1, col2) VALUES (1, 2), (3, 4), (5, 6);

等同于代码

START TRANSACTION;
INSERT INTO mytable (col1, col2) VALUES (1, 2), (3, 4), (5, 6);
COMMIT

或实际上可能意味着:

START TRANSACTION;
INSERT INTO mytable (col1, col2) VALUES (1, 2);
COMMIT
START TRANSACTION;
INSERT INTO mytable (col1, col2) VALUES (3, 4);
COMMIT
START TRANSACTION;
INSERT INTO mytable (col1, col2) VALUES (5, 6);
COMMIT

你能告诉我吗?

另外,值得一提的是,我尝试不将所有50000行插入为单个语句,而是一次插入不超过5000行(没有显式事务,也可以将5000行作为单个语句插入),我得到了有争议的结果-在某些桌子上,它的性能提高了大约6倍,而在另一些桌子上,它的性能提高了大约2倍,总的来说,它们的工作速度都变慢了。我认为提交仅在执行整个语句之后才会发生,但是现在我对此有所怀疑。

0 个答案:

没有答案