Hola, La definición de la vista: CREATE OR REPLACE VIEW reimp AS SELECT t1.av_id, t1.pc_id, t1.av_d, t1.av_h, t1.av_h1, t1.av_h2, t1.av_t, t1.av_r, t1.av_ve, t1.av_cp, t1.av_dl, t1.av_cnc, t1.av_cc, t1.av_tr, t1.av_ov, t1.av_rr, t1.av_ov1, t1.av_gtvh, t1.av_cop, t1.av_pd, t1.av_hl, t1.av_tt, t1.av_cl, t1.av_cd, t1.av_dlr, t2.adv_ar, t2.adv_q, t2.adv_up, t2.adv_vat, t2.adv_com, t2.adv_or, t2.adv_pa, t2.adv_cd, t2.adv_verde, t2.adv_tte FROM a_v t1, a_dv t2 WHERE t1.av_id = t2.av_id AND t1.av_ov = t2.av_ov;
Las consultas: -- select count(*) from reimp where av_d >= '01/12/2013'; 673133 en 5022 ms -- select count(*) from reimp; 6380664 en 2051 ms Los explain: el explain analyze con >= '01/12/2013' 'Aggregate (cost=545557.78..545557.79 rows=1 width=10) (actual time=152389.058..152389.059 rows=1 loops=1)' ' -> Hash Join (cost=262267.42..544984.31 rows=114695 width=10) (actual time=144506.241..151553.263 rows=673133 loops=1)' ' Hash Cond: ((t1.av_id = t2.av_id) AND (t1.av_ov = t2.av_ov))' ' -> Index Scan using avavd on a_v t1 (cost=0.42..5248.01 rows=114546 width=6) (actual time=58.424..5261.424 rows=116009 loops=1)' ' Index Cond: (av_d >= '2013-12-01'::date)' ' -> Hash (cost=135397.40..135397.40 rows=6380840 width=16) (actual time=144124.583..144124.583 rows=6380667 loops=1)' ' Buckets: 4096 Batches: 512 Memory Usage: 662kB' ' -> Seq Scan on a_dv t2 (cost=0.00..135397.40 rows=6380840 width=16) (actual time=19.458..125134.296 rows=6380667 loops=1)' 'Total runtime: 152389.832 ms' el explain analyze con = '02/12/2013' 'Aggregate (cost=14273.12..14273.13 rows=1 width=10) (actual time=1156.302..1156.304 rows=1 loops=1)' ' -> Nested Loop (cost=0.86..14264.50 rows=1724 width=10) (actual time=57.399..1104.501 rows=17692 loops=1)' ' -> Index Scan using avavd on a_v t1 (cost=0.42..83.46 rows=1722 width=6) (actual time=0.020..6.738 rows=3144 loops=1)' ' Index Cond: (av_d = '2013-12-02'::date)' ' -> Index Scan using advavidav_ov on a_dv t2 (cost=0.43..8.23 rows=1 width=16) (actual time=0.300..0.322 rows=6 loops=3144)' ' Index Cond: ((av_id = t1.av_id) AND (av_ov = t1.av_ov))' 'Total runtime: 1156.437 ms' Como ves la diferencia es brutal Saludos ________________________________ De: Jaime Casanova <[email protected]> Para: FRANCISCO JOSE PALAO VILLANUEVA <[email protected]> CC: "[email protected]" <[email protected]> Enviado: Miércoles 12 de febrero de 2014 0:43 Asunto: Re: [pgsql-es-ayuda] Query lenta 2014-02-11 13:30 GMT-05:00 FRANCISCO JOSE PALAO VILLANUEVA <[email protected]>: > Hola haber si me pueden ayudar: > > Tengo una relación maestro detalle entre cabeceras de ventas y detalles de > ventas. Tengo un view 'reimp' que enlaza las dos tablas mediante cod_factura > y cod_oficina. > puedes por favor mostrar la definicion de la vista? > Si ejecuto un select sum(adv_q*adv_up) from reimp where av_d >= '01/12/2013' > hace un escaneado secuencial de la tabla detalles > La ejecución puede demorarse hasta en 105 segundos ???, sin embargo si hago > select sum(adv_q*adv_up) from reimp where av_d = '01/12/2013' entonces usa > índices de tabla detalles y es casi inmediato si hago un between y las filas puedes mostrar el resultado de estas dos consultas? - select count(*) from reimp where av_d >= '01/12/2013'; - select count(*) from reimp; > están ya cacheadas también usa índices sino no. Les pongo el explain haber > si me pueden ayudar: > Mejor muestra un EXPLAIN ANALYZE -- Jaime Casanova www.2ndQuadrant.com Professional PostgreSQL: Soporte 24x7 y capacitación Phone: +593 4 5107566 Cell: +593 987171157 - Enviado a la lista de correo pgsql-es-ayuda ([email protected]) Para cambiar tu suscripción: http://www.postgresql.org/mailpref/pgsql-es-ayuda
