Re: Trabajando con Grandes BD

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Vida Luz <vlal(at)ns(dot)ideay(dot)net(dot)ni>
Cc: Leonel <lnunez(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Trabajando con Grandes BD
Date: 2007-03-14 20:38:33
Message-ID: 20070314203833.GB25817@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Vida Luz escribió:
> con explain este es el costo que se tiene: aporx unos 2.7 minutos.
>
>
>
> c=# explain analyze SELECT count(distinct cliente_cod) FROM dm.venta GROUP
> BY geren_cod;
> QUERY PLAN
> ---------------------------------------------------------------------------------------------------------------------------------
> GroupAggregate (cost=421813.88..437247.45 rows=3 width=14) (actual
> time=159638.993..165536.431 rows=3 loops=1)
> -> Sort (cost=421813.88..426958.39 rows=2057804 width=14) (actual
> time=152000.054..158792.629 rows=2057804 loops=1)
> Sort Key: geren_cod
> -> Seq Scan on venta (cost=0.00..180972.04 rows=2057804
> width=14) (actual time=3.358..29855.519 rows=2057804 loops=1)
> Total runtime: 166281.479 ms
> (5 rows)

El problema aca es que count() requiere recorrer la tabla completa, a
diferencia de otros sistemas gestores de datos. Hay maneras mucho mas
rapidas de obtener valores aproximados, por ejemplo puedes usar esta
funcion:

create or replace function estimated_count(text) returns float8 as $$
declare r text;
begin
for r in execute 'explain ' || $1 loop
return substring(r from 'rows=([0-9]+) ');
end loop;
end$$ language plpgsql strict;

Uno de los hilos donde se menciona este tema es aca:
http://archives.postgresql.org/pgsql-hackers/2006-10/msg01159.php
donde hay otras soluciones alternativas.

Esto lo encontre en http://search.postgresql.org haciendo click en
"archive search" y usando las palabras clave "count estimated plpgsql".
Seguro que puedes encontrar mas informacion util de ese modo.

Hmm, me acabo de dar cuenta que tienes count(distinct) :-( Ese seria un
problema un poco distinto ... usando "count distinct" en la pagina de
busqueda aparece este thread que es de tu mismo tema:
http://archives.postgresql.org/pgsql-performance/2007-01/msg00412.php

Ojala te sirva ...

Con respecto a vistas materializadas, pon "materialized" en la pagina de
busqueda y mira los links "recomendados".

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jaime Quiroga 2007-03-14 21:44:35 Me mudo a POSTGRES
Previous Message Gabriel Colina 2007-03-14 20:28:15 Re: Simbolos dentro de cadenas OT