Obecně řečeno, můžete použít jednu nebo více z následujících možností:
- Zahájit transakci, vložit, potvrdit
- Sbalit více hodnot do jediné vložky do dotazu
- Před vložením zrušte všechna omezení a po hromadném vložení je obnovte (možná s výjimkou primárního klíče, tím si však nejsem příliš jistý)
- Použijte
insert into ... select
pokud je to vhodné
První (pomocí transakcí) s největší pravděpodobností pomůže, ale nejsem si jistý, zda to funguje na tabulkách myisam, s innodb to dělá velmi dobrou práci - používám je pouze, když jsem nucen používat mysql, preferuji postgresql .
Ve vašem konkrétním případě můžete vložením 100 000 řádků dat provést následující:
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;
Vyzkoušeno na mém počítači, mám:
Query OK, 100000 rows affected (0.70 sec)
Records: 100000 Duplicates: 0 Warnings: 0
Jsem si docela jistý, že na 100 000 řádků nemůžete být o moc rychlejší.