Generellt sett kan du använda något eller flera av följande:
- Starta en transaktion, infoga, commit
- Packa flera värden i en enda infogning i fråga
- Släpp alla begränsningar innan du infogar och återställ begränsningar efter massinsättningen (förutom möjligen primärnyckeln, dock inte så säker på det)
- Använd
insert into ... select
om lämpligt
Den första (med transaktioner) kommer troligen att hjälpa, men jag är inte säker på om den fungerar på myisam-tabeller, med innodb gör den ett mycket bra jobb - jag använder bara dem när jag är tvungen att använda mysql, jag föredrar postgresql .
I ditt specifika fall, genom att infoga 100 000 rader med data, kan du göra följande:
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;
Testade detta på min maskin, fick:
Query OK, 100000 rows affected (0.70 sec)
Records: 100000 Duplicates: 0 Warnings: 0
Jag är ganska säker på att du inte kan bli mycket snabbare än så för 100 000 rader.