[Pgsql-ayuda] indices...

GUSTAVO MARTIN OCAMPO gocampo79@hotmail.com
Mon, 10 Nov 2003 21:36:32 +0000


Alvaro, trate de crear la funcion y el indice asi..

CREATE FUNCTION extraer_ano(date) RETURNS int AS 'return extract(year
from $1);' IMMUTABLE STRICT LANGUAGE sql;

pero.......

test=>ERROR: parser: parse error at or near "return" at character 4

pero luego intente lo siguiente......

CREATE FUNCTION extraer_ano(date) RETURNS double precision AS 'select return 
extract(year
from $1);' IMMUTABLE STRICT LANGUAGE sql;
CREATE FUNCTION

luego pude crear el indice, pero cuando hice.....

test=>select distinct extraer_ano(fecha_vencimiento) as fecha from 
basemovibanco;

consegui lo siguiente......

                                                           QUERY PLAN
---------------------------------------------------------------------------------------------------------------------------------
Unique  (cost=18100.75..18887.62 rows=15737 width=4) (actual 
time=3079.17..3290.59 rows=2 loops=1)
   ->  Sort  (cost=18100.75..18494.19 rows=157373 width=4) (actual 
time=3079.16..3209.57 rows=157373 loops=1)
         Sort Key: extraer_ano(fecha_vencimiento)
         ->  Seq Scan on basemovibanco  (cost=0.00..3284.73 rows=157373 
width=4) (actual time=0.56..2234.29 rows=157373 loops=1)
Total runtime: 3295.85 msec
(5 rows)

....la consulta se demoro mas.
En que estare errando?por lo que estoy viendo no esta usando el indice, y 
ademas el plan de ejecución si lo ves es el mismo que el de antes, o sea, en 
la linea "sort key" se ve la ejecucion de la funcion 
"extraer_ano(fecha_vencimiento)"
y antes se veia la ejecucion de "date_part('year'::text, 
fecha_vencimiento)", creo que lo mismo, no?
Si estoy equivocado, aceptare criticas con todo gusto, despues de todo me 
gusta aprender.....:-)
Gracias









>From: Alvaro Herrera <alvherre@dcc.uchile.cl>
>To: GUSTAVO MARTIN OCAMPO <gocampo79@hotmail.com>
>CC: pgsql-ayuda@tlali.iztacala.unam.mx
>Subject: Re: [Pgsql-ayuda] indices...
>Date: Mon, 10 Nov 2003 14:20:50 -0300
>
>On Mon, Nov 10, 2003 at 03:22:02PM +0000, GUSTAVO MARTIN OCAMPO wrote:
> > Hola lista, tengo una tabla llamada basemovibanco de la forma:
>
> > test=>explain analyze select distinct extract (year from
> > basemovibanco.fecha_vencimiento) as fecha;
>
> > Hay alguna manera de optimizar esta consulta?
>
>Hum ... prueba con algo como
>CREATE FUNCTION extract_year(date) RETURNS int AS 'return extract(year
>from $1);' IMMUTABLE STRICT LANGUAGE sql;
>
>CREATE INDEX bmb_yr_idx ON basemovibanco (extract_year(fecha_vencimiento));
>
>Luego
>SELECT distinct extract_year(fecha_vencimiento) as fecha FROM 
>basemovibanco;
>
>etc.  Cocinar apropiadamente.
>
>--
>Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
>Hi! I'm a .signature virus!
>cp me into your .signature file to help me spread!

_________________________________________________________________
Las mejores tiendas, los precios mas bajos, entregas en todo el mundo, 
YupiMSN Compras: www.yupimsn.com/compras