我在向表中插入约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倍,总的来说,它们的工作速度都变慢了。我认为提交仅在执行整个语句之后才会发生,但是现在我对此有所怀疑。