Re: Mejorar rendimiento en consulta usando fechas

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

In response to

Responses

Browse pgsql-es-ayuda by date

  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