From: | "manuel lamas" <manuel3w(at)hotmail(dot)com> |
---|---|
To: | alvherre(at)commandprompt(dot)com |
Subject: | Re: Obligar al optimizador a usar un index en particular en un SELECT |
Date: | 2006-03-07 17:22:09 |
Message-ID: | BAY103-F25DE3524EC3161F08AC1195EE0@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>
>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: Tue, 7 Mar 2006 13:58:58 -0300
>
>manuel lamas escribió:
>
> > Van algunos años que uso Postgresql y con el tiempo me di cuenta que a
> > veces existen funcionalidades interesantes de las cuales no se encuentra
> > mucha literatura. No me sorprendería que lo que pido exista.
>
>No existe. Pueden pasar dos cosas:
>
>1. el índice que quieres usar no se puede usar por algún motivo
>
>2. el optimizador cree que no es conveniente usar el índice.
>
>Para decirte de que se trata en cada caso, podrías mostrarnos un caso de
>ejemplo y nosotros te decimos por que no usa el índice. Entonces a lo
>mejor se puede corregir esa situación.
>
Bueno.. que lastima que no exista.
Igual les puedo mostrar alguna query. Tengo una tabla DOSSIERS con 60'000
entradas. El PRIMARY KEY esta en la columna dossierid y tengo un índice en
la columna etat_ing_est_img.
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.
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.
EXPLAIN ANALYSE SELECT dossierid FROM DOSSIERS WHERE etat_ing_est_img =
'processing' ;
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------------------
Index Scan using in_dossiers_etat_ing_est_img on dossiers
(cost=0.00..1598.67 rows=697 width=17) (actual time=0.026..1.731 rows=624
loops=1)
Index Cond: ((etat_ing_est_img)::text = 'processing'::text)
Total runtime: 2.183 ms
(3 rows)
ECS=# 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.181..2004.666 rows=7316 loops=1)
Filter: ((etat_ing_est_img)::text = 'new'::text)
Total runtime: 2010.403 ms
(3 rows)
Gracias
From | Date | Subject | |
---|---|---|---|
Next Message | Juan Martínez | 2006-03-07 17:50:22 | Re: disculpas desde ecuador fue:(Re: Problema en accesos a BD del Servidor) |
Previous Message | Miguel Ortega | 2006-03-07 17:01:45 | PG_HBA |