Mysql
 sql >> база данни >  >> RDS >> Mysql

бързо попълване на MySQL с голяма поредица от редове

Най-общо казано, можете да използвате едно или повече от следните:

  • Започнете транзакция, направете вмъквания, ангажирайте
  • Пакетирайте множество стойности в едно вмъкване в заявка
  • Премахнете всички ограничения, преди да направите вмъкване и възстановете ограниченията след масовото вмъкване (с изключение на евентуално първичен ключ, но не съм много сигурен за това)
  • Използвайте insert into ... select ако е подходящо

Първото (използване на транзакции) най-вероятно ще помогне, но не съм сигурен дали работи на таблици myisam, с innodb върши много добра работа - използвам ги само когато съм принуден да използвам mysql, предпочитам postgresql .

Във вашия конкретен случай, вмъквайки 100 000 реда с данни, можете да направите следното:

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;

Тествах това на моята машина, получих:

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

Почти съм сигурен, че не можете да получите много по-бързо от това за 100 000 реда.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. UTF - 8 с JPA и Glassfish 4.0

  2. използвайки mysqli за предотвратяване на инжектиране на sql, как да задам NULL или CURRENT_DATE?

  3. onbeforeprint() и onafterprint() еквивалентни за браузъри извън IE

  4. ИЗТРИВАНЕ ОТ БРОЙ (*) в MySQL

  5. Класът няма посочено име на таблица или таблица и не наследява от съществуващ клас, картографиран в таблица