Re: sobre indices

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Andrea <andrea(at)compesa(dot)com(dot)br>
Cc: Postgresql-es <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: sobre indices
Date: 2006-10-24 15:31:46
Message-ID: 20061024153146.GF26593@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Andrea escribió:
> Hola
>
> Tengo una duda. (Trabajo con Postgresql 8.1.4 en Linux).
>
> Hay una query que hace inner join con una tabla que tiene la condicione
> cnta_icdebitoconta = 1 --> resultado: 15.396 lineas
> y otra con
> cnta_icdebitoconta = 2 --> resultado: 1.995.603 lineas
>
> Yo haga la consulta con la opcione cnta_icdebitoconta = 1 y la respuesta viene muy rapida
>
> Pero con la opcione cnta_icdebitoconta = 2 si lleva mucho tiempo
> En la tabla hay indice para cnta_icdebitoconta
>
> Alguien tiene alguna idea que hacer para mejorar mi consulta.

cnta_icdebitoconta=2 es una condicion mucho menos selectiva (es decir,
trae una porcion mucho mas grande de la tabla), por lo que Postgres
probablemente esta escogiendo hacer un recorrido sencuencial de la tabla
en lugar de usar el indice. De todas formas, si hiciera un recorrido de
indice probablemente se demoraria mucho mas de todas formas.

Yo creo que la consulta WHERE cnta_icdebitoconta=2 no tiene sentido,
porque 2 millones de tuplas no puede servirle a la aplicacion. Creo que
debes hacer una consulta mas compleja que tenga mas condiciones en el
WHERE, o bien hacer JOIN con otras tablas que limiten esa consulta.

Creo que ya estas haciendo un JOIN. Que tal si nos muestra la consulta
y el EXPLAIN ANALYZE?

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Ricardo Navarro L 2006-10-24 15:52:25 RE: herramienta
Previous Message LDC - Carmen Brando 2006-10-24 15:14:29 Herramienta CASE