Ogólnie rzecz biorąc, możesz użyć jednego lub kilku z poniższych:
- Rozpocznij transakcję, wstawiaj, zatwierdzaj
- Zapakuj wiele wartości w jedną wstawkę do zapytania
- Upuść wszelkie ograniczenia przed wykonaniem wstawiania i przywróć ograniczenia po wstawieniu masowym (z wyjątkiem prawdopodobnie klucza podstawowego, ale nie jestem tego pewien)
- Użyj
insert into ... select
jeśli pasuje
Pierwsza (korzystająca z transakcji) najprawdopodobniej pomoże, ale nie jestem pewien czy działa na tablicach myisam, z innodb spisuje się bardzo dobrze - używam tych tylko gdy jestem zmuszony do korzystania z mysql, wolę postgresql .
W konkretnym przypadku, wstawiając 100000 wierszy danych, możesz wykonać następujące czynności:
INSERT INTO status(id, responseCode, lastUpdate) SELECT @row := @row + 1 as row, 503, NOW() FROM
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t,
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t2,
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t3,
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t4,
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t5,
(SELECT @row:=0) t6;
Przetestowałem to na moim komputerze, otrzymałem:
Query OK, 100000 rows affected (0.70 sec)
Records: 100000 Duplicates: 0 Warnings: 0
Jestem prawie pewien, że nie da się osiągnąć dużo szybciej niż w przypadku 100000 wierszy.