optimiser des insert

optimiser des insert - PHP - Programmation

Marsh Posté le 06-05-2006 à 00:27:42    

Bonjour,
 
voici mon problème, j'ai un fichier .txt qui contient 40 000 lignes (chaque ligne contient un numéro de série de 19 caractères)
 
il faut que j'enregistre tous ces numéros dans ma base MYSQL. Ce que j'ai testé pour le moment c'est une boucle de mon fichier ligne par ligne et ui fait un insert sur chaque ligne. Mais c'est très long ca m'a pris 40 secondes donc trop long pour ce que je veux faire.  
 
Je voulais savoir si vous aviez une idée pour faire ca le plus rapidement possible. Existe il une requete insert "multiples" qui permettrait de faire plusieurs enregistrements en une seule fois, si oui je la connais pas.
 
Merci d'avance


---------------
N'oubliez pas de mettre [RESOLU] dans le titre quand c'est fini - Pour poster vos sources : http://paste.clicksources.com/
Reply

Marsh Posté le 06-05-2006 à 00:27:42   

Reply

Marsh Posté le 06-05-2006 à 01:01:39    

c'est bon trouvé. pour ceux qui cherche la solution
 
insert into table (champ) VALUES ('value1'), ('value2') etc... et voila
 
pour info je suis tombé de 40 secondes à 1.68 sec ;) pas mal comme truc quand même :)
 
@++


---------------
N'oubliez pas de mettre [RESOLU] dans le titre quand c'est fini - Pour poster vos sources : http://paste.clicksources.com/
Reply

Marsh Posté le 06-05-2006 à 02:37:27    

euhh, loool d'une je ne vois pas comment tu pourrais faire autrement que insert into table (champ) VALUES ('value1'), ('value2')  et deuxio, tu es toujours obligé de lire ton fichier ligne par ligne et d'inserer à la volée dans ta base de donnée

Reply

Marsh Posté le 06-05-2006 à 03:35:51    

weed a écrit :

euhh, loool d'une je ne vois pas comment tu pourrais faire autrement que insert into table (champ) VALUES ('value1'), ('value2')  et deuxio, tu es toujours obligé de lire ton fichier ligne par ligne et d'inserer à la volée dans ta base de donnée


 
euhh, loool bah non :D
 
Il passe de 40 instructions insert à une seule, ça réduit forcément beaucoup le temps d'exécution.
 
A la limite, il lit son fichier avec file(), transforme le tout en chaine avec implode et efface les ajouts provoqués par file puis colle ça derrière sa requête et basta, c'est encore plus efficace que ta lecture à la volée :)

Reply

Marsh Posté le 06-05-2006 à 08:43:43    

oki, je ne savais pas que l'on pouvait lire un fichier tout d'un seul coup.

Reply

Marsh Posté le 06-05-2006 à 09:36:25    

au détriment de l'utilisation mémoire. fais 40.000 insert dans une transaction, ça devrait être plus performant mais pas gourmand en mémoire.

Reply

Marsh Posté le 06-05-2006 à 11:05:14    

et un LOAD INFILE ça serait pas encore plus rapide ?


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 06-05-2006 à 12:33:58    

weed a écrit :

euhh, loool d'une je ne vois pas comment tu pourrais faire autrement que insert into table (champ) VALUES ('value1'), ('value2')


Code :
  1. INSERT table SET champ=value1


:D

Message cité 1 fois
Message édité par The-Shadow le 06-05-2006 à 12:38:09
Reply

Marsh Posté le 06-05-2006 à 16:01:11    

Sh@rdar a écrit :

et un LOAD INFILE ça serait pas encore plus rapide ?


 
Je me souviens pas si on peut préciser le champs de destination avec un load data infile, mais je pense pas.

Reply

Marsh Posté le 06-05-2006 à 16:09:13    

si si, tu peux ignorer des lignes et mettre les champs dans l'ordre que tu veux :jap:


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 06-05-2006 à 16:09:13   

Reply

Marsh Posté le 06-05-2006 à 17:11:33    

The-Shadow a écrit :

Code :
  1. INSERT table SET champ=value1


:D


 [:argue]

Reply

Marsh Posté le 06-05-2006 à 17:46:24    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed