Re: Obligar al optimizador a usar un index en particular en un SELECT

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

In response to

Responses

Browse pgsql-es-ayuda by date

  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