Когда происходит автоматическая фиксация, когда много строк вставляются как один оператор? - PullRequest
0 голосов
/ 21 мая 2019

У меня есть некоторые проблемы с производительностью вставки около 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 раз, в то время как на других он ухудшался примерно в два раза, и в целом все работало медленнее. Я считал, что коммит происходит только после выполнения всего оператора, но теперь у меня есть сомнения по этому поводу.

...