Re: Rendimiento en consulta simple

From: Alvaro Herrera <alvherre(at)dcc(dot)uchile(dot)cl>
To: Carlos Querol Saez <Carlos_Querol_Saez(at)carrefour(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Rendimiento en consulta simple
Date: 2004-11-11 20:44:44
Message-ID: 20041111204444.GG4904@surnet.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Thu, Nov 11, 2004 at 09:15:29PM +0100, Carlos Querol Saez wrote:

Hola,

> El caso es que al lanzar la consulta:
>
> select count(*) from pedidos;
>
> tarda un minuto y medio en devolverme el resultado, mientras que en
> informix esta misma consulta tarda un par de segundos.

En Postgres, la funciones de agregacion son opacas y no hay mucha
infraestructura para optimizarlas. En el caso de count(), por varios
motivos no se examinan los indices para obtener el valor total, por lo
que hay que hacer un recorrido secuencial de todos los datos. La
sugerencia usual es usar otro mecanismo para obtener la cantidad de
datos:

- si necesitas la cantidad con mucha exactitud, usa un disparador que
mantenga la cantidad actualizada en otra tabla.

- si una aproximacion es suficiente, obten el valor de reltuples de la
tabla pg_class, el cual AFAIR se actualiza con REINDEX, VACUUM y
ANALYZE (por lo que mientras mas lejanas esten esas operaciones, mayor
la imprecision del valor obtenido).

Para mas detalles sobre esto, revisa los archivos de pgsql-general,
pgsql-hackers y posiblemente pgsql-performance, lo cual puedes hacer
eficientemente via http://www.pgsql.ru

Suerte.

--
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
"Aprende a avergonzarte más ante ti que ante los demás" (Demócrito)

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Luz Lopez 2004-11-11 20:59:17 Re: acelerar la ejecucion de consultas
Previous Message Leonel Nunez 2004-11-11 20:37:54 Re: Respaldo Incremental