Gros Pb de perf sur une procédure stockée
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 :
Code:
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 ; |
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.
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) ?