| From: | FRANCISCO JOSE PALAO VILLANUEVA <fjpv_2000(at)yahoo(dot)es> | 
|---|---|
| To: | Jaime Casanova <jaime(at)2ndquadrant(dot)com> | 
| Cc: | "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org> | 
| Subject: | Re: Query lenta | 
| Date: | 2014-02-12 12:16:13 | 
| Message-ID: | 1392207373.19153.YahooMailNeo@web172603.mail.ir2.yahoo.com | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-es-ayuda | 
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 <jaime(at)2ndquadrant(dot)com>
Para: FRANCISCO JOSE PALAO VILLANUEVA <fjpv_2000(at)yahoo(dot)es> 
CC: "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org> 
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 <fjpv_2000(at)yahoo(dot)es>:
> 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 (pgsql-es-ayuda(at)postgresql(dot)org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda
| From | Date | Subject | |
|---|---|---|---|
| Next Message | cDaniel GE | 2014-02-12 13:50:02 | Re: CASE en ORDER BY | 
| Previous Message | FRANCISCO JOSE PALAO VILLANUEVA | 2014-02-12 11:41:00 | Re: Query lenta |