RE: por que SEQ SCAN Y NO INDEX SCAN

From: MIGUEL CANCHAS <mcanchas(at)tsr(dot)com(dot)pe>
To: "'pgsql-es-ayuda(at)postgresql(dot)org'" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: por que SEQ SCAN Y NO INDEX SCAN
Date: 2008-04-19 15:38:11
Message-ID: 410117BB01F4D611B73A00010331DD2403B58C7C@tsnt.tsr.com.pe
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

-----Mensaje original-----
De: Alvaro Herrera [mailto:alvherre(at)commandprompt(dot)com]
Enviado el: Sábado, 19 de Abril de 2008 10:28 a.m.
Para: MIGUEL CANCHAS
CC: 'pgsql-es-ayuda(at)postgresql(dot)org'
Asunto: Re: [pgsql-es-ayuda] por que SEQ SCAN Y NO INDEX SCAN

MIGUEL CANCHAS escribió:

> Entonces como puedo solucionarlo ?
> Es una consulta en donde se demora 34 segundos en "botarme" 11 registros,
> demasiado tiempo.

La consulta que nos mostraste retorna 57000 registros, no 11. Además,
demora 2 segundos, no 34.

No digo que estés mintiendo, sino que seguramente nos mostraste
información sobre algo que no es realmente lo que nos querías mostrar..

[Retry] [Cancel] [Panic]

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

Upss, tienes razon Alvaro, mostre la incorrecta, esta es la correcta :

"Sort (cost=367338.18..368455.45 rows=446907 width=122) (actual
time=31339.381..31805.840 rows=446922 loops=1)"
" Sort Key: hrt3.orden_partida"
" -> Merge Right Join (cost=252182.97..264293.82 rows=446907 width=122)
(actual time=26215.515..28306.312 rows=446922 loops=1)"
" Merge Cond: (((almacen_crudo.idrollo)::text = "inner"."?column10?")
AND (almacen_crudo.anio_maqui = hrt3.anio_maqui) AND
((almacen_crudo.idmaqui)::text = "inner"."?column11?"))"
" -> Merge Left Join (cost=156440.54..163314.70 rows=70708
width=67) (actual time=13110.125..14253.025 rows=70743 loops=1)"
" Merge Cond: (("outer"."?column5?" = "inner"."?column9?") AND
(almacen_crudo.anio_maqui = tejidos1.anio_maqui) AND ("outer"."?column6?" =
"inner"."?column10?"))"
" -> Sort (cost=9545.96..9722.73 rows=70708 width=32) (actual
time=388.950..566.331 rows=70708 loops=1)"
" Sort Key: (almacen_crudo.idrollo)::text,
almacen_crudo.anio_maqui, (almacen_crudo.idmaqui)::text"
" -> Seq Scan on almacen_crudo (cost=0.00..1915.08
rows=70708 width=32) (actual time=0.633..65.147 rows=70708 loops=1)"
" -> Sort (cost=146894.58..148385.48 rows=596361 width=56)
(actual time=12720.763..13112.310 rows=595637 loops=1)"
" Sort Key: (tejidos2.idrollo)::text,
tejidos1.anio_maqui, (tejidos1.idmaqui)::text"
" -> Hash Join (cost=5037.26..44837.18 rows=596361
width=56) (actual time=255.220..4590.557 rows=595637 loops=1)"
" Hash Cond: (tejidos2.idapu = tejidos1.idapu)"
" -> Seq Scan on tejidos2 (cost=0.00..18360.61
rows=596361 width=37) (actual time=0.058..397.908 rows=596313 loops=1)"
" -> Hash (cost=3688.33..3688.33 rows=66394
width=27) (actual time=177.254..177.254 rows=66211 loops=1)"
" -> Hash Join (cost=18.60..3688.33
rows=66394 width=27) (actual time=0.810..126.716 rows=66211 loops=1)"
" Hash Cond: (((tejidos1.idmaqui)::text
= (mmaqtejido1.idmaqui)::text) AND (tejidos1.anio_maqui =
mmaqtejido1.anio_maqui))"
" -> Seq Scan on tejidos1
(cost=0.00..1345.94 rows=66394 width=22) (actual time=0.034..34.702
rows=66394 loops=1)"
" -> Hash (cost=10.44..10.44 rows=544
width=19) (actual time=0.731..0.731 rows=544 loops=1)"
" -> Seq Scan on mmaqtejido1
(cost=0.00..10.44 rows=544 width=19) (actual time=0.030..0.350 rows=544
loops=1)"
" -> Sort (cost=95742.43..96859.70 rows=446907 width=76) (actual
time=13105.379..13425.604 rows=446922 loops=1)"
" Sort Key: (hrt3.idrollo)::text, hrt3.anio_maqui,
(hrt3.idmaqui)::text"
" -> Seq Scan on hrt3 (cost=0.00..11024.07 rows=446907
width=76) (actual time=17.694..5647.742 rows=446907 loops=1)"
"Total runtime: 31970.760 ms"

de la siguiente consulta :
explain analyse SELECT hrt3.orden_partida, hrt3.idpartida,
hrt3.item_partida,
hrt3.anio_partida, hrt3.idrollo, hrt3.idmaqui, hrt3.anio_maqui,
hrt3.kg_armado, hrt3.kg_despacho, almacen_crudo.rollo_kilos,
vejecutado_tejeduria.idot, vejecutado_tejeduria.item_ot,
vejecutado_tejeduria.idmaquo, vejecutado_tejeduria.fecha_tejido,
vejecutado_tejeduria.idtejedor
FROM ((hrt3 LEFT JOIN almacen_crudo ON (((((hrt3.idmaqui)::text =
(almacen_crudo.idmaqui)::text) AND (hrt3.anio_maqui =
almacen_crudo.anio_maqui)) AND ((hrt3.idrollo)::text =
(almacen_crudo.idrollo)::text)))) LEFT JOIN vejecutado_tejeduria ON
(((((almacen_crudo.idmaqui)::text =
(vejecutado_tejeduria.idmaqui)::text)
AND (almacen_crudo.anio_maqui = vejecutado_tejeduria.anio_maqui)) AND
((almacen_crudo.idrollo)::text =
(vejecutado_tejeduria.idrollo)::text))))
ORDER BY hrt3.orden_partida;

Cuando le hago un where a esta vista, en donde me arroja solo 11 registros,
se demora aproximadamente 34 segundos.

Miguel

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jaime Casanova 2008-04-19 17:22:43 Re: por que SEQ SCAN Y NO INDEX SCAN
Previous Message Alvaro Herrera 2008-04-19 15:28:10 Re: por que SEQ SCAN Y NO INDEX SCAN