Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qTk0s-00AWJS-8X for pgsql-sql@arkaria.postgresql.org; Wed, 09 Aug 2023 14:18:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1qTk0q-005edr-H3 for pgsql-sql@arkaria.postgresql.org; Wed, 09 Aug 2023 14:18:12 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qTk0q-005edj-00 for pgsql-sql@lists.postgresql.org; Wed, 09 Aug 2023 14:18:12 +0000 Received: from mail-yw1-x112e.google.com ([2607:f8b0:4864:20::112e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qTk0n-001PM4-1b for pgsql-sql@lists.postgresql.org; Wed, 09 Aug 2023 14:18:10 +0000 Received: by mail-yw1-x112e.google.com with SMTP id 00721157ae682-586df08bba0so38542807b3.3 for ; Wed, 09 Aug 2023 07:18:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lelarge-info.20221208.gappssmtp.com; s=20221208; t=1691590688; x=1692195488; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=kMcOQFBXdGja6qFcs1iOgCOaOuECSJ5TGBIl/qw+IVo=; b=ilsQ2WTsOBqnmii5n9UUFF2luJZkp1rI8zR/O0lIvQstcBbva6S0G/pskSOZpkA/gd aDH2riysb0vg/iaSKHpb+FqrwfxZorMHu0QsDyWIl7uBgsbi2zVKKXBo4FspZ6gSiZXa NIXQq090jzCBeRWbiduRNzvPhRKZw5STyMRQGtITZEo6IH7bKcfbepwqbSBMzQmIzqOo py/VVF2Gc3fNpyqjT+HlRoEK4hWy4Afg6Cxh1YoTLXuWEhFPiBMjKaerGYcvZvKri6lP kvuNhcGbPIKCCwyBJlYBz/GY5JUzeayb1irBokot3o+VSyUFGsxWG+7rpIvqSLZj6J27 KmQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691590688; x=1692195488; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=kMcOQFBXdGja6qFcs1iOgCOaOuECSJ5TGBIl/qw+IVo=; b=hSAfng/sBFFoE736rW8ooA/iQPLPGeVBkknzwC5XZp8OfLguu5sW/2byy8HbqfhQ11 E7zoBggnYOR9QJUlFkadm8VD4g+EWVc+mzrZooMcfnYjiirwlsKCuP8Bmq46O9Alp1Eu ROdxq88tnCQnAFiJMUPlWdOH1PucIMQxDJ02vXpaYohM7rmaVk79C9D7+FvHy7rVTIyr NqEkway61KpMiMFlOeLxJHrhFLqkwlIHrQFjadQrUHP6k8ykl2y9R4fGG9hTmA5csiRH +hGYeN8CyktPn02BfuqChmg+XFmmavbet4yKPZx4zKAMyqFit0QWK3ivaXdNEnyNbdO6 Hdrg== X-Gm-Message-State: AOJu0YyWugvhi8TlmKCGg84ReNHEeSk4ePjrl/oNc6iTgjDCyozgWdev CTg5RfPaShK2EtSP4FpNr5INeei3howJPLpUMZr1Bg== X-Google-Smtp-Source: AGHT+IHs61Si+LcP/wtH5tloCd33qh5fdqBR9PvjLTVaPO7/RlTcp2mFS1J3MK9jiZmYXdobcL/6VMsB4KAzSP/FwQc= X-Received: by 2002:a0d:c684:0:b0:583:d0c3:9ae1 with SMTP id i126-20020a0dc684000000b00583d0c39ae1mr2912405ywd.51.1691590687895; Wed, 09 Aug 2023 07:18:07 -0700 (PDT) MIME-Version: 1.0 References: <40e35930-6a84-bf0e-fb91-f5db56367763@gmail.com> In-Reply-To: <40e35930-6a84-bf0e-fb91-f5db56367763@gmail.com> From: Guillaume Lelarge Date: Wed, 9 Aug 2023 16:17:56 +0200 Message-ID: Subject: =?UTF-8?Q?Re=3A_variable_interm=C3=A9diaires?= To: Alain Benard Cc: pgsql-sql@lists.postgresql.org Content-Type: multipart/alternative; boundary="0000000000000ecd1506027e2610" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000000ecd1506027e2610 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable 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=C3=BBt 2023 =C3=A0 15:39, Alain Benard a =C3=A9crit : > Bonjour , > > je dispose d'une table tr=C3=A8s volumineuse dans laquelle je voudrai met= tre =C3=A0 > jour une colonne disons 'colmaj' pour une seule ann=C3=A9e (le where anno= nce > pr=C3=A8s de 4 millions de lignes =C3=A0 mettre =C3=A0 jour). Ma difficul= t=C3=A9 est de savoir > comment optimiser cette mise =C3=A0 jour sachant que la valeur de la colo= nne > colmaj =C3=A0 enregistrer est une variable calcul=C3=A9e =C3=A0 partir de= s autres colonnes > de cette table (et d'une autre table par jointure) et qu'il y a diff=C3= =A9rents > niveaux de variables interm=C3=A9diaire et qu'il sera impossible de desce= ndre en > dessous de 3 ou 4 niveaux pour ces calculs. Sur le principe je pourrais > utiliser des With les uns =C3=A0 la suite des autres et ce serait ce qu'i= l y a > de plus lisible mais d'un point de vue perf je sais que =C3=A7a devrait = =C3=AAtre > 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); id= em > avec du cross join . Enfin je vais peut-=C3=AAtre me r=C3=A9soudre =C3= =A0 faire un > ensemble de proc=C3=A9dure stock=C3=A9es qui calculeront les variables in= term=C3=A9diaires > pour ensuite me fournir la valeur finale me permettant une mise =C3=A0 j= our du > type > > update matable > > set colmaj =3D maprocedure(toutes les variables utiles) > > where annee =3D 2022 > > Inutile de me r=C3=A9pondre qu'il faut simplifier le calcul pour avoir mo= ins de > niveau interm=C3=A9diaire car ce calcul est dict=C3=A9 par des scientifiq= ues et que > pour r=C3=A9duire le nombre de niveau il faudrait effectuer plusieurs foi= s les > m=C3=AAmes calculs (ce que j'aimerai =C3=A9viter) car des variables inter= m=C3=A9diaires > sont r=C3=A9utilis=C3=A9es plusieurs fois. > > Qu=E2=80=99en pensez-vous et est-ce que finalement la proc=C3=A9dure stoc= k=C3=A9e n'est pas > ce qu'il y a de plus efficace? > > Merci par avance. > > Alain. > > > --=20 Guillaume. --0000000000000ecd1506027e2610 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

This is= an english mailing list and, as such, you should ask your questions in eng= lish. You can also use the french mailing list if you want to speak french = (https://www= .postgresql.org/list/pgsql-fr-generale/).

Than= ks.


Le=C2=A0mer. 9 ao=C3=BBt 2023 =C3=A0=C2=A015:= 39, Alain Benard <alain.bena= rd54@gmail.com> a =C3=A9crit=C2=A0:
=20 =20 =20

Bonjour ,

je dispose d'une table tr=C3=A8s volumineuse dans laquelle je vo= udrai mettre =C3=A0 jour une colonne disons 'colmaj' pour une seule= ann=C3=A9e (le where annonce pr=C3=A8s de 4 millions de lignes =C3=A0 mettre =C3=A0 = jour). Ma difficult=C3=A9 est de savoir comment optimiser cette mise =C3=A0 jou= r sachant que la valeur de la colonne colmaj =C3=A0 enregistrer est une variable calcul=C3=A9e =C3=A0 partir des autres colonnes de cette tab= le (et d'une autre table par jointure)=C2=A0 et qu'il y a diff=C3=A9= rents niveaux de variables interm=C3=A9diaire et qu'il sera impossible de desce= ndre en dessous de 3 ou 4 niveaux pour ces calculs. Sur le principe je pourrais utiliser des With les uns =C3=A0 la suite des autres et ce serait ce qu'il y a de plus lisible mais d'un point de vue pe= rf je sais que =C3=A7a devrait =C3=AAtre mauvais. J'essaie d'utilis= er 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 .=C2=A0= Enfin je vais peut-=C3=AAtre me r=C3=A9soudre =C3=A0 faire un ensemble de p= roc=C3=A9dure stock=C3=A9es qui calculeront les variables interm=C3=A9diaires pour = ensuite me fournir la valeur finale me permettant=C2=A0 une mise =C3=A0 jour = du type

update matable

=C2=A0=C2=A0=C2=A0 set colmaj =3D maprocedure(toutes les variables= utiles)

where annee =3D 2022

Inutile de me r=C3=A9pondre qu'il faut simplifier le calcul pour= avoir moins de niveau interm=C3=A9diaire car ce calcul est dict=C3=A9 par d= es scientifiques et que pour r=C3=A9duire le nombre de niveau il faudrai= t effectuer plusieurs fois les m=C3=AAmes calculs (ce que j'aimerai =C3=A9viter) car des variables interm=C3=A9diaires sont r=C3=A9utilis= =C3=A9es plusieurs fois.

Qu=E2=80=99en pensez-vous et est-ce que finalement la proc=C3=A9dure= stock=C3=A9e n'est pas ce qu'il y a de plus efficace?

Merci par avance.

Alain.




--
Guillaume.
=
--0000000000000ecd1506027e2610--