Skip site navigation (1) Skip section navigation (2)

Re: SQL pour trouver le premier libre?

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 (view raw or flat)
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,
> 


In response to

Responses

pgsql-fr-generale by date

Next:From: Jean-Paul ArgudoDate: 2006-09-16 09:47:13
Subject: Re: SQL pour trouver le premier libre?
Previous:From: Jean-Paul ArgudoDate: 2006-09-13 12:31:01
Subject: Re: [pgsql-fr-generale] Mercredi, beertime taverne des halles à Paris, 19h

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group