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