From: | Rodrigo Ruiz <rruizf(at)gmail(dot)com> |
---|---|
To: | Alvaro Herrera <alvherre(at)2ndquadrant(dot)com> |
Cc: | Ayuda <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Mejorar rendimiento en consulta usando fechas |
Date: | 2013-04-25 19:18:35 |
Message-ID: | 5179818B.5040107@gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
El 25/04/2013 16:03, Alvaro Herrera escribió:
> Rodrigo Ruiz escribió:
>
> Hola Rodrigo,
>
>> Existe un campo llamado fecha_nacimiento y una consulta de ejemplo
>> sería traer todos las personas que tengan entre 25 y 35 años a la
>> fecha.
> Creo que el problema es que usar un índice en una consulta así no
> serviría de mucho, porque supongo que el porcentaje de personas que
> están en ese rango de fechas es muy alto. Si es el caso, es posible que
> el plan que se está ejecutando sea realmente lo óptimo.
>
>> La consulta sería algo como:
>>
>> select * from persona where fecha_nacimiento between (current_date -
>> interval '35 years') and (current_date - interval '25 years');
> Puedes mostrar un explain analyze de esta consulta?
>
Hola Alvaro,
el explain analyze de la consulta arrojó lo siguiente:
"Index Scan using persona_fecha_nacimiento_idx on persona
(cost=0.01..9.68 rows=1 width=835) (actual time=0.097..102908.235
rows=699498 loops=1)"
" Index Cond: ((fecha_nacimiento >= (('now'::text)::date - '35
years'::interval)) AND (fecha_nacimiento <= (('now'::text)::date - '25
years'::interval)))"
"Total runtime: 103004.026 ms"
La consulta así como está, nunca se realizará, por ello trae muchas
tuplas, sin embargo siempre se aplica al menos un filtro adicional como
región, provincia o comuna. Este rango es menor a si por ejemplo
selecciono las personas mayores de 45 años, que involucra cerca del 35%
de los registros, algo así como 4 millones y medios de tuplas.
Si no agrego el filtro de la fecha de nacimiento y busco por profesión o
provincia por ejemplo, el tiempo baja a unos 10 segundos, el problema
está cuando en la consulta agrego un filtro por fechas.
Se me olvidó mencionar que el tipo de dato de fecha_nacimiento es date,
no timestamp.
Saludos.-
--
Rodrigo Ruiz Fuentes
-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)org)
Para cambiar tu suscripcin:
http://www.postgresql.org/mailpref/pgsql-es-ayuda
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2013-04-25 19:43:32 | Re: Mejorar rendimiento en consulta usando fechas |
Previous Message | Alvaro Herrera | 2013-04-25 19:03:43 | Re: Mejorar rendimiento en consulta usando fechas |