Bonjour,
J'ai un problème avec une procédure stockée, qui au final me semble être lente lente qu'un traitement en php + mysql...
Je dois lancer l'import d'un gros fichier d'annonces immobilières (environ 80 000 annonces), avec quelques opérations sur chaque annonce (genre : si c'est une nouvelle annonce, j'insère juste l'annonce dans la base, par contre si c'est une mise à jour, je sauvegarde les modifs dans une table d'historique).
Pour améliorer les performances, je commence par stocker toutes les annonces à scanner dans une table temporaire. Après, ma procédure stockée parcourt la table temporaire et traite chaque enregistrement.
Mon code :
Mon traitement dure presque 2 heures quand je le lance. Quand il ne fait pas planter le serveur mysql (sous windows) au bout de 5000 enregistrements.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 DROP PROCEDURE IF EXISTS proapart.traite_annonces_from_fichier $$ CREATE PROCEDURE proapart.traite_annonces_from_fichier( IN des_param_de_config TYPEPARAM ) BEGIN DECLARE done INT DEFAULT 0; DECLARE d_autres_variables_necesaires_au_traitement TYPEVARIABLE; DECLARE cursor_annonces CURSOR FOR SELECT table_temp.mes_champs_a_recuperer FROM table_temp; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; OPEN cursor_annonces; REPEAT FETCH cursor_annonces INTO mes_var_utiles_au_traitement; -- Mes tests et mes traitements UNTIL done END REPEAT; CLOSE cursor_annonces; END $$ DELIMITER ;
C'est dû à quoi d'après vous ?
Est-ce c'est que Mysql n'apprécie pas que je lui envoie 80 000 enregistrements dans le cu(rseur) ?
Partager