Mysql
 sql >> Baza danych >  >> RDS >> Mysql

szybko zapełnij MySQL dużą serią wierszy

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pobieranie danych z dwóch tabel pierwsza tabela danych tekstowych druga tabela obrazów nośników. obrazy zawodzą

  2. Połączyć się z bazą danych mysql 5.0 za pomocą czystego vbscript?

  3. MySQL:Tworzenie nowego unikalnego pola w już wypełnionej tabeli

  4. Jak wykonać kopię zapasową / wyeksportować bazę danych MySQL za pomocą PHP

  5. Dlaczego otrzymuję Nie można przekazać parametru 2 przez błąd odniesienia, gdy używam bindParam ze stałą wartością?