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
>
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 |