Re: SQL pour trouver le premier libre?

From: Pierre Couderc <pierre(at)couderc(dot)cc>
To: Jean-Paul Argudo <jean-paul(at)argudo(dot)org>
Cc: pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: SQL pour trouver le premier libre?
Date: 2006-06-03 10:09:01
Message-ID: 44815FBD.5070509@couderc.cc
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

Je ne m'inquiète pas pour les performances : actuellement je fais un
SELECT a=1 LIMIT 1, puis SELECT a=2 puis etc... jusqu'à ce j'ai un
retour vide, me donnant la réponse. Mes tables sont assez petites, mais
ça commence à être sensible parfois...
Tout autre solution ne peut être que plus rapide!

Jean-Paul Argudo a écrit :
> Re,
>
>> le probleme, c'est que ca aussi, ca doit faire un full table scan sur la table
>> nombres... ca en fait meme 2 :)
>> c'est une requete qui est potentiellement longue si il y a beaucoup
> d'enreg.
>
> Pas sûr. Dans mon exemple, la table de test est tellement ridicule que
> je n'ai pas mis d'index, et pour cause, il ne serait évidement pas utilisé.
>
> Par contre, dans le contexte d'une table beaucoup plus grosse, disons
> quelques millions d'enregistrements (?), ça peut valoir le coup.
>
> Mais c'est la requête sur le a+1 qui va probablement faire un full scan,
> oui.
>
> Alors je me dis que créer un index fonctionnel sur (a+1) est peut être
> une bonne solution...
>
> Mais au final, ça fait un index de plus à "entretenir", et les
> inserts/updates en seront lésés!
>
> En tout cas, tout cela mérite un test. Je fais confiance à Pierre pour
> qu'il revienne vers nous et nous dise si c'est mieux ou moins bien..
>
>> je ne pense pas qu'il y ait une solution économique en perfs pour ce genre de
>> traitements, du moins pas directement en SQL.
>
> Ça se teste, donc. Bien souvent, transformer ce genre de traitements
> avec des requêtes qui jouent avec des ensembles (union, except, etc..)
> améliore considérablement les perfs.
>
>> a mon avis, il serait plus performant, à chaque modification de la table de
>> liste de nombres, de déclencher un trigger qui entretiendrait une table de
>> liste d'elements libres...
>
> Oui c'est ce qui se fait dans ce genre de cas.
>
>> le mieux étant de ne pas faire du tout ce remplissage, si possible. y a t'il
>> un réel besoin fonctionnel à ce remplissage ? ne peut on pas prendre le max
>> de la liste +1 (dans ce cas, utilisation d'une séquence...)
>
> Ça aussi c'est une bonne question...
>
> A+
>

In response to

Browse pgsql-fr-generale by date

  From Date Subject
Next Message Pierre Couderc 2006-06-03 10:28:43 Re: SQL pour trouver le premier libre?
Previous Message Alain Lucari 2006-06-03 10:05:54 Blocage pg_dump sur erreur