From: | "manuel lamas" <manuel3w(at)hotmail(dot)com> |
---|---|
To: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Obligar al optimizador a usar un index en particular en un SELECT |
Date: | 2006-03-08 15:46:56 |
Message-ID: | BAY103-F2071814BDDEE24BA42E87E95EF0@phx.gbl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
>2006/3/7, manuel lamas <manuel3w(at)hotmail(dot)com>:
> >
> >
> >
> > >From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
> > >To: manuel lamas <manuel3w(at)hotmail(dot)com>
> > >Subject: Re: [pgsql-es-ayuda] Obligar al optimizador a usar un index en
> > >particular en un SELECT
> > >Date: Tue, 7 Mar 2006 14:42:33 -0300
> > >
> > >manuel lamas wrote:
> > >
> > > > Lo que sigue lo entiendo perfectamente.
> > > >
> > > > Cuando pido que etat_ing_est_img = 'processing' el optimizador usa
>el
> > > > índice in_dossiers_etat_ing_est_img porque hay pocas lineas y sale
>mas
> > > > barato.
> > > >
> > > > Cuando pido que etat_ing_est_img = 'new' el optimizador hace un scan
>de
> > >la
> > > > tabla porque hay muchas lineas y en ese caso el optimizador lo ve
>mas
> > > > barato.
> > >
> > >Ok, perfecto.
> > >
> > > > Igual me hubiera gustado ver cuanto sale en el ultimo query usando
>el
> > > > índice in_dossiers_etat_ing_est_img en lugar del scan de la tabla.
> > >
> > >set enable_seqscan to off;
> > >explain analyze ...
> > >
> >
> >
> > Muy bueno! Miren la diferencia del costo. Primero usa normalmente el
>scan de
> > tabla y después usa el índice.
> >
> > Preguntas:
> >
> > Como afecta "enable_seqscan" al optimizador?
> >
> > Cuando pongo set enable_seqscan to off; afecta solo el SELECT que sigue
>o
> > todos las comandas que siguen.?
> >
> > Que pasa si después del SELECT no pongo set enable_seqscan to on;?
> >
> >
> >
> > EXPLAIN ANALYSE SELECT dossierid FROM DOSSIERS WHERE etat_ing_est_img =
> > 'new' ;
> > QUERY PLAN
> >
>---------------------------------------------------------------------------------------------------------------
> > Seq Scan on dossiers (cost=0.00..9719.19 rows=7766 width=17) (actual
> > time=0.176..2001.824 rows=7316 loops=1)
> > Filter: ((etat_ing_est_img)::text = 'new'::text)
> > Total runtime: 2007.562 ms
> > (3 rows)
> >
> > ECS=# set enable_seqscan to off;
> > SET
> > ECS=# EXPLAIN ANALYSE SELECT dossierid FROM DOSSIERS WHERE
>etat_ing_est_img
> > = 'new' ;
> >
>QUERY
> > PLAN
> >
>----------------------------------------------------------------------------------------------------------------------------------------------------
> > Index Scan using in_dossiers_etat_ing_est_img on dossiers
> > (cost=0.00..16640.08 rows=7766 width=17) (actual time=8.082..402.201
> > rows=7316 loops=1)
> > Index Cond: ((etat_ing_est_img)::text = 'new'::text)
> > Total runtime: 407.500 ms
> > (3 rows)
> >
> > ECS=# set enable_seqscan to on;
> >
> >
>From: "Pere Rodríguez" <pere(dot)rodriguez(dot)rodriguez(at)gmail(dot)com>
>To: "manuel lamas" <manuel3w(at)hotmail(dot)com>
>CC: pgsql-es-ayuda(at)postgresql(dot)org
>Subject: Re: [pgsql-es-ayuda] Obligar al optimizador a usar un index en
>particular en un SELECT
>Date: Wed, 8 Mar 2006 09:12:43 +0100
>
>Interesante ...
>
>Solo una pregunta trivial: ¿Ejecutas vacuum analyze regularmente sobre
>la tabla dossiers?
>
>Saludos,
>
>pere
>
Si, ejecuto vacuum analyse todos los días.
Terminando el tema, ahí va mi conclusión:
1 - No se puede obligar al optimizador a usar de un índice en particular.
2 - Lo único que se le puede obligar es de NO hacer un scan de tabla...
esperando que el optimizador elija el índice que quieres. Para eso se usa
SET enable_seqscan to off ;
3 - El comando SET enable_seqscan afecta solo la sesión corriente. Lo que
quiere decir si tu programa abre una nueva sesión a cada intervención (tipo
web), no es necesario hacer SET enable_seqscan to on ; para reponer la
situación después.
Muchas gracias a todos los que tomaron de su valioso tiempo para ayudarme.
Atentamente
Manuel
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2006-03-08 15:58:04 | Re: Obligar al optimizador a usar un index en particular en un SELECT |
Previous Message | Jose Antonio Zacarias Rios | 2006-03-08 15:46:21 | RE: disculpas desde ecuador fue:(Re: Problema en accesos a BD d |