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 : 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 ;
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) ?