2 votes

accélérer l'insertion des données

J'utilise une base de données MySQL.

Si j'ai 6 000 000 de nouveaux enregistrements doivent être inséré dans un tableau (pas une table vide).

Question 1 :

Est

ALTER TABLE tbl_name DISABLE KEYS;

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9), ... ...

ALTER TABLE tbl_name ENABLE KEYS;
OPTIMIZE TABLE tbl_name;

plus rapide que :

ALTER TABLE tbl_name DISABLE KEYS;

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3)
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3)
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3)
...
...

ALTER TABLE tbl_name ENABLE KEYS;
OPTIMIZE TABLE tbl_name;

?

Question 2 :

La première s'appelle l'insertion en masse ?

-----------Update---------------

Devrais-je touches d'activation/désactivation y optimiser ma table après ? Comme @ Neil 's comment semble ne pas recommander de le faire. Quelle est l'opinion des autres ?

2voto

Devart Points 52715

Essayez d'optimiser vos requêtes en utilisant les insertions en masse. Cela devrait considérablement augmenter la vitesse du processus d'insertion des données.

Vous avez écrit que vous avez rencontré une erreur lors de l'insertion d'une grande quantité de données -. base de données disparue .

Dans ce cas la taille de la requête ne doit pas dépasser la taille maximale du paquet. - voir les informations sur la variable max_allowed_packet.


Comment vérifier la valeur de max_allowed_packet ?

SELECT @@global.max_allowed_packet;

Comment définir cette valeur -

SET @@global.max_allowed_packet = 200000;

Plus d'informations ici

Si tout cela ne vous suffit pas, jetez donc un coup d'œil à cet article (comme l'a suggéré Gfox). Vitesse des instructions INSERT .

1voto

Gfox Points 228

Veuillez vous référer à cet article.

En envoyant une seule demande, vous économiserez plusieurs étapes et gagnerez du temps. En particulier lorsqu'il s'agit d'insérer des centaines de milliers de lignes, la différence de temps sera significative.

1voto

Mona Abdelmajeed Points 433

Je pense que l'envoi d'une seule requête est plus rapide mais avec 6 000 000 d'enregistrements,

Database will have problems ,

J'ai essayé sous Windows d'insérer 1000000 enregistrements en une seule requête,

J'ai obtenu cette erreur database gone away :(

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X