Buena idea, gracias por las respuestas. Saludos
~~~~~~~~~~~~~~~~ Guillermo Villanueva El 23 de mayo de 2011 12:05, Silvio Quadri <[email protected]> escribió: > El día 23 de mayo de 2011 11:46, Guillermo Villanueva > <[email protected]> escribió: > > buenos días, > > Tengo una tabla de datos históricos con un millon de registros > > aproximadamente. > > En la tabla tengo un campo periodo, el cual es un timestamp con datos > como: > > '2011-01-01', '2011-02-01', '2011-03-01', por cada uno de esos periodos > > tengo aproximadamente 100mil registros, no quiero crear una tabla > adicional > > de periodos. > > Tengo creado un índice de la tabla por periodos. > > Si realizo la consulta: > > select periodo from nacer.historicotemp group by periodo > > o > > select distinct periodo from nacer.historicotemp > > demora casi un minuto y el explain menciona que hace lo siguiente: > > "HashAggregate (cost=310333.40..310333.56 rows=16 width=8) (actual > > time=17045.806..17045.812 rows=17 loops=1)" > > " -> Seq Scan on historicotemp (cost=0.00..301156.72 rows=3670672 > > width=8) (actual time=34.278..11863.851 rows=3925154 loops=1)" > > "Total runtime: 17045.998 ms" > > Es posible mejorar esta consulta? Hay forma de decirle que utilice el > índice > > por periodo? > > Hola ... > > No tiene sentido utilizar el índice por período ya que el motor > siempre tiene que recorrer completa para ver todos los períodos. En > este caso, si el tamaño de registro es grande, sería más rápido leer > nada más que el índice (sin leer los demás datos), pero esa > funcionalidad no la tiene Postgres. > > ¿Porqué no utilizar select max(periodo), min(periodo) ... ? en este > caso sí tomaría el índice y luego completás con un ciclo sencillo del > lado del cliente. > > Saludos! > Silvio > > > > > > > > Desde ya muchas gracias > > Saludos > > > > ~~~~~~~~~~~~~~~~ > > Guillermo Villanueva > > > > > > -- > Silvio Quadri >
