Вы можете объединить операторы вставки из
INSERT INTO table (f1, f2) VALUES ($f1, $f2);
INSERT INTO table (f1, f2) VALUES ($other, $other);
etc...
в
INSERT INTO table (f1, f2) VALUES ($f1, $f2), ($other, $other), etc...
, что несколько снизит затраты на анализ.Это может немного ускорить процесс.Однако не стоит слишком углубляться в группировку вставок, поскольку для запроса задан параметр max_allowed_packet
.
4000 строк за 2 минуты - это все еще 33 строки в секунду.Это не так уж плохо, особенно на огромной таблице, где необходимо обновить индекс.Вы можете отключить ключи в таблице перед выполнением вставки, а затем заново собрать ключ с помощью REPAIR TABLE
, но это может занять больше времени, особенно при сканировании 320 миллионов строк.Вам нужно будет сделать несколько тестов, чтобы понять, стоит ли это делать.
Что касается SELECTS / JOINS, так как вы находитесь на таблицах MYISAM, то нет способа скрыть новые таблицы в транзакции, пока они всесделанный.Каждая строка сразу же будет видна другому сеансу при ее вводе, если только вы не заблокируете таблицу, чтобы получить эксклюзивный доступ к ней для вставок.Но тогда вы заблокировали всех остальных во время работы вставки.