Thread

  1. variable intermédiaires

    Alain Benard <alain.benard54@gmail.com> — 2023-08-09T13:38:54Z

    Bonjour ,
    
    je dispose d'une table très volumineuse dans laquelle je voudrai mettre 
    à jour une colonne disons 'colmaj' pour une seule année (le where 
    annonce près de 4 millions de lignes à mettre à jour). Ma difficulté est 
    de savoir comment optimiser cette mise à jour sachant que la valeur de 
    la colonne colmaj à enregistrer est une variable calculée à partir des 
    autres colonnes de cette table (et d'une autre table par jointure)  et 
    qu'il y a différents niveaux de variables intermédiaire et qu'il sera 
    impossible de descendre en dessous de 3 ou 4 niveaux pour ces calculs. 
    Sur le principe je pourrais utiliser des With les uns à la suite des 
    autres et ce serait ce qu'il y a de plus lisible mais d'un point de vue 
    perf je sais que ça devrait être mauvais. J'essaie d'utiliser du 
    'LATERAL' mais je n'ai pas vraiment l'impression qu'on puisse faire plus 
    qu'un niveau (2 avec le LATERAL); idem avec du cross join .  Enfin je 
    vais peut-être me résoudre à faire un ensemble de procédure stockées qui 
    calculeront les variables intermédiaires pour ensuite me fournir la 
    valeur finale me permettant  une mise à jour du type
    
        update matable
    
             set colmaj = maprocedure(toutes les variables utiles)
    
        where annee = 2022
    
    Inutile de me répondre qu'il faut simplifier le calcul pour avoir moins 
    de niveau intermédiaire car ce calcul est dicté par des scientifiques et 
    que pour réduire le nombre de niveau il faudrait effectuer plusieurs 
    fois les mêmes calculs (ce que j'aimerai éviter) car des variables 
    intermédiaires sont réutilisées plusieurs fois.
    
    Qu’en pensez-vous et est-ce que finalement la procédure stockée n'est 
    pas ce qu'il y a de plus efficace?
    
    Merci par avance.
    
    Alain.
    
    
  2. Re: variable intermédiaires

    Guillaume Lelarge <guillaume@lelarge.info> — 2023-08-09T14:17:56Z

    Hi,
    
    This is an english mailing list and, as such, you should ask your questions
    in english. You can also use the french mailing list if you want to speak
    french (https://www.postgresql.org/list/pgsql-fr-generale/).
    
    Thanks.
    
    
    Le mer. 9 août 2023 à 15:39, Alain Benard <alain.benard54@gmail.com> a
    écrit :
    
    > Bonjour ,
    >
    > je dispose d'une table très volumineuse dans laquelle je voudrai mettre à
    > jour une colonne disons 'colmaj' pour une seule année (le where annonce
    > près de 4 millions de lignes à mettre à jour). Ma difficulté est de savoir
    > comment optimiser cette mise à jour sachant que la valeur de la colonne
    > colmaj à enregistrer est une variable calculée à partir des autres colonnes
    > de cette table (et d'une autre table par jointure)  et qu'il y a différents
    > niveaux de variables intermédiaire et qu'il sera impossible de descendre en
    > dessous de 3 ou 4 niveaux pour ces calculs. Sur le principe je pourrais
    > utiliser des With les uns à la suite des autres et ce serait ce qu'il y a
    > de plus lisible mais d'un point de vue perf je sais que ça devrait être
    > mauvais. J'essaie d'utiliser du 'LATERAL' mais je n'ai pas vraiment
    > l'impression qu'on puisse faire plus qu'un niveau (2 avec le LATERAL); idem
    > avec du cross join .  Enfin je vais peut-être me résoudre à faire un
    > ensemble de procédure stockées qui calculeront les variables intermédiaires
    > pour ensuite me fournir la valeur finale me permettant  une mise à jour du
    > type
    >
    > update matable
    >
    >     set colmaj = maprocedure(toutes les variables utiles)
    >
    > where annee = 2022
    >
    > Inutile de me répondre qu'il faut simplifier le calcul pour avoir moins de
    > niveau intermédiaire car ce calcul est dicté par des scientifiques et que
    > pour réduire le nombre de niveau il faudrait effectuer plusieurs fois les
    > mêmes calculs (ce que j'aimerai éviter) car des variables intermédiaires
    > sont réutilisées plusieurs fois.
    >
    > Qu’en pensez-vous et est-ce que finalement la procédure stockée n'est pas
    > ce qu'il y a de plus efficace?
    >
    > Merci par avance.
    >
    > Alain.
    >
    >
    >
    
    -- 
    Guillaume.