Re: Update et effet sur les INDEX

From: Michel Payan <michel(dot)payan(at)gmail(dot)com>
To: Guillaume Lelarge <guillaume(at)lelarge(dot)info>
Cc: pgsql-fr-generale <pgsql-fr-generale(at)postgresql(dot)org>, rodolphe(at)quiedeville(dot)org
Subject: Re: Update et effet sur les INDEX
Date: 2014-07-03 21:22:27
Message-ID: CAPFLA-On+3i9O6fHEVjERz50r0mWwFBin4ay70zpK1FMe_Qasw@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

+1 sur l'analyse de Guillaume.
C'est vrai pour presque tous les sgbdr !
Le 3 juil. 2014 23:18, "Guillaume Lelarge" <guillaume(at)lelarge(dot)info> a
écrit :

> Le 3 juillet 2014 22:58, Rodolphe Quiédeville <rodolphe(at)quiedeville(dot)org>
> a écrit :
>
>> Bonsoir,
>>
>> J'ai cherché en vain ce soir des informations sur la mécanique interne à
>> PG lors d'un UPDATE et les effets sur les index, je cherche à mesurer
>> l'impact de performance entre deux requêtes, une spécifiant uniquement
>> la colonne à modifier et une autre indiquant toutes les colonnes même
>> celle qui ne sont pas modifiées.
>> Exemple
>>
>> CREATE TABLE foo (id integer, name varchar(255), active boolean);
>> CREATE INDEX foo_id ON foo(id);
>> CREATE INDEX foo_name ON foo(name);
>>
>> INSERT INTO foo (id, name, active) VALUES (1, 'Barack', false);
>> INSERT INTO foo (id, name, active) VALUES (2, 'Angela', false);
>>
>> #La question est si je fais un update :
>>
>> UPDATE foo SET active = true WHERE id = 1;
>>
>> L'index foo_name ne sera pas mis à jour car name n'est pas modifié.
>>
>>
> Il sera mis à jour car l'adresse de la ligne changera. Sauf si la nouvelle
> adresse se trouve sur le même bloc que l'ancienne.
>
>
>> Mais si je fais (considérant toujours que active=false), en ajoutant la
>> colonne name mais avec la même valeur.
>>
>> UPDATE foo SET name='Barack', active = true WHERE id = 1;
>>
>> Est-ce que PG met à jour l'index où il détecte que la valeur n'a pas
>> changé dans la ligne ?
>
>
> Il met à jour l'index.
>
>
>> Je suppose que oui mais j'aimerai tout de même
>> une confirmation, et si vous avez quelques pointeurs là-dessus ça
>> m'intéresse. Je cherche à comprendre tous les impacts en terme de perf,
>> et même si il ne met pas à jour l'index le traitement entraine-t'il une
>> sur consommation non négligeable ?
>>
>
> Bon courage, sincèrement. Il y a tellement de cas possibles que ça rend
> l'analyse très compliquée.
>
> Mon seul conseil est de ne pas mettre à jour une ligne pour rien car ça
> sera forcément plus coûteux que de ne pas la mettre à jour. Même si vous
> faites un bête "UPDATE t1 set c1=c1;", vous dupliquez la ligne, ce qui a
> une conséquence immédiate en écriture de la table et des index, et une
> conséquence retardée au niveau de la maintenance par VACUUM de la table. Je
> pense que, sur ce bête truc, on peut gagner beaucoup. Ensuite, le coup des
> colonnes me paraît plus discutable.
>
>
> --
> Guillaume.
> http://blog.guillaume.lelarge.info
> http://www.dalibo.com
>

In response to

Browse pgsql-fr-generale by date

  From Date Subject
Next Message Dimitri Fontaine 2014-07-03 22:42:40 Re: Update et effet sur les INDEX
Previous Message Guillaume Lelarge 2014-07-03 21:17:48 Re: Update et effet sur les INDEX