Re: Agilizar consultas sobre fechas

From: Rodrigo Ramirez Norambuena <rramirez(at)linuxchillan(dot)org>
To: Manuel Alejandro Estevez Fernandez <stvzito(at)gmail(dot)com>
Cc: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Agilizar consultas sobre fechas
Date: 2009-10-03 17:59:24
Message-ID: 5f1020a60910031059x1202a05dxafaa645bffb1f68e@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El día 3 de octubre de 2009 13:40, Manuel Alejandro Estevez Fernandez
<stvzito(at)gmail(dot)com> escribió:
>>
>> Eso retorna en 117 milisegundos, lo cual parece razonable (si bien un
>> poco lento, pero no parece haber nada terrible aquí).  Los resultados en
>> la base de verdad deberían ser distintos, y es ahí donde es interesante
>> hacer análisis.
>>
>> Tener una base de datos de prueba que no tiene más o menos la misma
>> cantidad de datos que la base de datos grande (o al menos una cantidad
>> importante de datos) no es muy buena idea, porque planes de ejecución
>> son muy distintos y no puedes sacar conclusiones respecto de qué tan
>> buenos serán los planes cuando pongas la consulta en producción.
>>
>>
>
> Gracias por tus comentarios Alvaro, agradezco que te tomes la molestía de
> leer y responder.
>
> Bueno aqui es el analize sobre la base de datos grande:
>
> "Nested Loop  (cost=0.00..9.11 rows=1 width=23) (actual
> time=2496.067..1308257.999 rows=1231 loops=1)"
> "  ->  Nested Loop  (cost=0.00..6.08 rows=1 width=31) (actual
> time=2496.033..1308230.160 rows=1231 loops=1)"
> "        Join Filter: (("inner".id_venta = "outer".id_venta) AND
> ("outer".numero_caja = "inner".numero_caja) AND ("outer".id_corte_caja =
> "inner".id_corte_caja))"
> "        ->  Index Scan using ventas_id_sucursal_index on ventas v
>  (cost=0.00..3.02 rows=1 width=16) (actual time=600.848..626.010 rows=673
> loops=1)"
> "              Index Cond: (id_sucursal = 11)"
> "              Filter: ((fecha)::date = '2009-08-13'::date)"
> "        ->  Index Scan using ventas_detalle_id_sucursal_index on
> ventas_detalle vd  (cost=0.00..3.03 rows=2 width=51) (actual
> time=0.026..1312.527 rows=1641934 loops=673)"
> "              Index Cond: (id_sucursal = 11)"
> "  ->  Index Scan using articulos_pkey on articulos a  (cost=0.00..3.01
> rows=1 width=4) (actual time=0.017..0.018 rows=1 loops=1231)"
> "        Index Cond: ("outer".id_articulo = a.id_articulo)"
> "        Filter: (id_servicio IS NULL)"
> "Total runtime: 1308259.159 ms"
>
> Espero sus comentarios.
>

Una vez se me presentó un problema donde las consultas se me hacían
muy lentas donde se hacía un barrido por una tabla condicionandola por
el campo fecha, en ese caso estaba fijado a timestamp. Lo
solucionamos fijando un indice a ese campo.

En nuestro caso necesitamos generar reportes del día y para eso
usabamos algo como

fecha >='2009-10-03 0:00' and fecha<= '2009-10-03 23:59'

y veo tu lo condicionas ((fecha)::date = '2009-08-13'::date)"...
posiblemente ese sea algo mas costoso.

Por lo visto en tu caso no veo que tengas un indice para ese campo.

Bueno, eso en nuestro caso nos solucionó a optimizar los tiempos de respuesta.
--
Rodrigo Ramírez Norambuena
http://decipher.blackhole.cl

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2009-10-03 23:46:42 Re: Agilizar consultas sobre fechas
Previous Message Manuel Alejandro Estevez Fernandez 2009-10-03 17:40:58 Re: Agilizar consultas sobre fechas