From: | Pierre Couderc <pierre(at)couderc(dot)cc> |
---|---|
To: | pgsql-fr-generale(at)postgresql(dot)org |
Cc: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: SQL pour trouver le premier libre? |
Date: | 2006-09-16 09:41:38 |
Message-ID: | 450BC6D2.1080306@couderc.cc |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-fr-generale |
Merci, j'ai mis mis le temps pour l'implémenter, on ne fait pas toujours
ce que l'on veut...
Mais ça marche parfaitement et c'est très rapide, infineiment petit à
l'echelle de de l'utilisateur.
Pierre Couderc
Jean-Paul Argudo a écrit :
> Re,
>
> Il y a une autre solution, qui me paraît être encore meilleure, et bien
> moins coûteuse, la voici:
>
> explain
> SELECT (x.a+1) AS id_disponible
> FROM nombres x
> LEFT JOIN nombres y
> ON ((x.a + 1) = y.a)
> WHERE y.a IS NULL
> ORDER BY x.a
> LIMIT 1;
> QUERY PLAN
> -----------------------------------------------------------------------------------
> Limit (cost=0.00..1.58 rows=1 width=4)
> -> Nested Loop Left Join (cost=0.00..22.09 rows=14 width=4)
> Join Filter: (("outer".a + 1) = "inner".a)
> Filter: ("inner".a IS NULL)
> -> Index Scan using id_a on nombres x (cost=0.00..3.15
> rows=14 width=4)
> -> Seq Scan on nombres y (cost=0.00..1.14 rows=14 width=4)
> (6 lignes)
>
> test2=> SELECT (x.a+1) AS id_disponible FROM nombres x LEFT JOIN nombres
> y ON ((x.a + 1) = y.a) WHERE y.a IS NULL ORDER BY x.a LIMIT 1;
> id_disponible
> ---------------
> 4
> (1 ligne)
>
> Si vous constatez des lenteurs, il vous faudra créer un index sur a (si
> ce n'est pas déjà fait, ce dont je doute):
>
> create unique index id_a on nombres(a);
>
> Et un index fonctionnel comme suit:
>
> create index id_a_suivant on nombres ((a+1));
>
> En tout cas, cette écriture sera moins coûteuse que celle avec le EXCEPT.
>
> Merci à John Hansen (appeljack) pour cette idée.
>
> Cordialement,
>
From | Date | Subject | |
---|---|---|---|
Next Message | Jean-Paul Argudo | 2006-09-16 09:47:13 | Re: SQL pour trouver le premier libre? |
Previous Message | Jean-Paul Argudo | 2006-09-13 12:31:01 | Re: [pgsql-fr-generale] Mercredi, beertime taverne des halles à Paris, 19h |