Alvaro, ¿será que la función de ventana será el gran cuello de botella?
saldo_contable * tasa_interes / (sum(saldo_contable) over ()) Será que creando una función que calcule este valor en una variable y luego en otra consulta dividir contra el valor calculado presentará una mejoria??.. En definitiva creo que deberá materializar la vista como indicas.. Estoy en postgres 9.1 y no puedo actualizar a 9.3 para usar este feature.. :( 2014-05-05 13:51 GMT-04:30 Alvaro Herrera <[email protected]>: > Alfredo Rico escribió: > > Alvaro muchas gracias por tu respuesta, en efecto el tiempo se reduce en > > prácticamente 1 segundo con el query propuesto. > > > > QUERY PLAN > > > > > -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- > > Aggregate (cost=121401.96..121401.98 rows=1 width=38) (actual > > time=3331.908..3331.908 rows=1 loops=1) > > -> WindowAgg (cost=0.00..106689.35 rows=980841 width=11) (actual > > time=1323.382..2522.707 rows=1037011 loops=1) > > -> Index Scan using idx_rm_cuentas_vistas_fecha_snapshot on > > rm_cuentas_vistas (cost=0.00..89524.63 rows=980841 width=11) (actual > > time=0.037..428.830 rows=1037011 loops=1) > > Index Cond: (fecha_snapshot = '2014-03-11'::date) > > Total runtime: 3333.872 ms > > > > Por que el CTE resultará más lento que el subselect?.. > > Porque tiene que "materializar" el resultado, es decir escribirlo a > disco (en un "tuplestore"), y luego el CTE scan tiene que leerlo desde > el tuplestore. > > Acá en el explain se ve que el indexscan te lleva 0,4 segundos, pero el > windowAgg empieza a contar desde 1,3 segundos ... ni idea dónde estará > ese 0,9 segundo faltante; y el Aggregate empieza a contar desde 3,3 > segundos pero el WindowAgg termina de contar a los 2,5 segundos: otros > 0,8 segundos que están sin explicar. Seguro que ambos tienen > explicaciones perfectamente razonables ... > > Si este tipo de reporte es frecuente ¿no te convendrá hacer una vista > materializada (VM) con los resultados? Si grabaras la salida del > WindowAgg, la consulta con el aggregate sería muy rápida. Podrías tener > una VM para cada fecha. > > -- > Álvaro Herrera http://www.2ndQuadrant.com/ > PostgreSQL Development, 24x7 Support, Training & Services > -- Saludos Cordiales.- Alfredo Rico. San Cristóbal - Venezuela.
