From: | Alvaro Herrera <alvherre(at)commandprompt(dot)com> |
---|---|
To: | Luis Salas <lsalas(at)safp(dot)cl> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: columnas con dos datos posibles (M,F) |
Date: | 2008-01-10 14:39:10 |
Message-ID: | 20080110143910.GC6465@alvh.no-ip.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Luis Salas escribió:
> Cuando se hace un "group by" de algunas columnas considerando una
> condición en la que se seleccione algún valor de otra columna con dos
> datos posibles (ej: columna sexo:masculino/femenino), el tiempo de
> respuesta excede los 15 segundos cuando la tabla contiene más de 6
> millones de registros, como es mi caso.
>
> Para la siguiente consulta:
> SELECT edad, region, count(*) AS cantidad FROM afiliados WHERE sexo='M'
> GROUP BY edad, region ORDER BY edad, region;
En una consulta como esta, siempre vas a tener que recorrer una mitad de
la tabla, así que el plan de no usar ningún índice es lo más
conveniente. Usar un índice, en el modelo de Postgres, es más lento y
causaría mayor I/O.
Si este tipo de consulta es algo que necesitas con mucha frecuencia,
creo que tendrías que enfrentarlo de un modo distinto -- desnormalizando
un poco el modelo. Prueba buscando "materialized view jonathan gardner"
en Google. La idea sería tener una vista materializada por edades y
regiones, lo cual te debería dar una tabla de aprox. 15 (regiones) * 40
(edades posibles) = 600 registros.
Hacer eso y mantener los contadores actualizados causaría más lentitud
en cada INSERT y UPDATE en la tabla de afiliados, pero dado que las
edades de cada persona cambian lentamente (más o menos una vez al año) y
la gente no se mueve mucho de región, no creo que vaya a ser un problema
en tu caso.
--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2008-01-10 14:52:44 | Re: GRAVE DUDA |
Previous Message | Johnny Verdugo | 2008-01-10 14:38:17 | GRAVE DUDA |