optimiser des insert - PHP - Programmation
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
@++
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
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
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
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.
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.
Marsh Posté le 06-05-2006 à 11:05:14
et un LOAD INFILE ça serait pas encore plus rapide ?
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 :
|
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.
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
Marsh Posté le 06-05-2006 à 17:11:33
Reply
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/