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-07 18:08:11
Message-ID: BAY103-F347301C158E71D5E4165B195EE0@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

>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;

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Juan Urrieta Alvarado 2006-03-07 18:11:00 formatear fecha
Previous Message Jaime Casanova 2006-03-07 18:06:35 Re: Introducir null en campo date.