sql >> Database >  >> RDS >> Mysql

snel een MySQL vullen met een grote reeks rijen

Over het algemeen kunt u een of meer van de volgende gebruiken:

  • Start een transactie, doe inserts, commit
  • Verpak meerdere waarden in een enkele insert in de query
  • Laat eventuele beperkingen weg voordat u de invoeging uitvoert en herstel de beperkingen na de massa-invoeging (behalve mogelijk de primaire sleutel, maar ben er niet erg zeker van)
  • Gebruik insert into ... select indien geschikt

De eerste (met behulp van transacties) zal waarschijnlijk helpen, maar ik weet niet zeker of het werkt op myisam-tabellen, met innodb doet het heel goed werk - ik gebruik die alleen als ik gedwongen word mysql te gebruiken, ik geef de voorkeur aan postgresql .

In uw specifieke geval, door 100000 rijen gegevens in te voegen, kunt u het volgende doen:

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;

Ik heb dit op mijn machine getest, kreeg:

Query OK, 100000 rows affected (0.70 sec)
Records: 100000  Duplicates: 0  Warnings: 0

Ik ben er vrij zeker van dat je niet veel sneller kunt worden dan dat voor 100.000 rijen.



  1. Beste aanpak om records toe te voegen aan DB met behulp van php/ajax/mysql?

  2. Een SQLite-database herstellen

  3. Hoe kan ik een hele rij (in SQL, niet in PL/SQL) doorgeven aan een opgeslagen functie?

  4. Gegevens tweemaal opgeslagen in MySQL-database. Weet je niet wat ik fout doe?