From: | "Guillermo E(dot) Villanueva" <guillermovil(at)gmail(dot)com> |
---|---|
To: | pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Seq Scan |
Date: | 2014-12-18 13:30:51 |
Message-ID: | CANm+PCBViWE2SM6xZwnsOF7RH=27m+BTqLd1nthgUnzTiVL6nw@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Buenos días, los molesto para consultarles sobre un explain que me llama la
atención.
La consulta que analizo es:
explain SELECT
c.id_comprobante,
c.fecha_comprobante,
s.afiapellido,
s.afinombre,
s.afidni,
s.clavebeneficiario,
string_agg(tp_codigo||nom_objetopres||coalesce(p.diag_codigo,v.diag_codigo),
' - ') prestaciones,
sum(cantidad*precio_prestacion) subtt
FROM
facturacion.comprobante c
inner join facturacion.prestacion2 p using(id_comprobante)
inner join facturacion.valuacion v using (id_valuacion)
inner join facturacion.nomenclador2 using(nom_id)
left join nacer.smiafiliados s using(id_smiafiliados)
WHERE
id_factura=5675
GROUP BY
1,2,3,4,5,6
ORDER BY
c.id_comprobante DESC
El resultado que obtengo es:
"GroupAggregate (cost=23601.13..23610.25 rows=192 width=84)"
" -> Sort (cost=23601.13..23601.61 rows=192 width=84)"
" Sort Key: c.id_comprobante, c.fecha_comprobante, s.afiapellido,
s.afinombre, s.afidni, s.clavebeneficiario"
" -> Nested Loop Left Join (cost=467.36..23593.85 rows=192
width=84)"
" -> Hash Join (cost=467.36..22059.15 rows=192 width=42)"
" Hash Cond: (v.nom_id = nomenclador2.nom_id)"
" -> Nested Loop (cost=423.70..22012.85 rows=192
width=38)"
" -> Hash Join (cost=423.70..21062.50 rows=192
width=35)"
" Hash Cond: (p.id_comprobante =
c.id_comprobante)"
" -> Seq Scan on prestacion2 p
(cost=0.00..16818.19 rows=1018319 width=23)"
" -> Hash (cost=420.87..420.87 rows=226
width=16)"
" -> Index Scan using
"IX_Relationship4" on comprobante c (cost=0.00..420.87 rows=226 width=16)"
" Index Cond: (id_factura =
5675)"
" -> Index Scan using valuacion_pk on valuacion v
(cost=0.00..4.94 rows=1 width=11)"
" Index Cond: (v.id_valuacion =
p.id_valuacion)"
" -> Hash (cost=29.96..29.96 rows=1096 width=12)"
" -> *Seq Scan on nomenclador2 (cost=0.00..29.96
rows=1096 width=12)"*
" -> Index Scan using smiafiliados_pkey on smiafiliados s
(cost=0.00..7.98 rows=1 width=50)"
" Index Cond: (c.id_smiafiliados = s.id_smiafiliados)"
Y lo que me llama la atención, es la línea marcada con rojo, ya que dice
que va a utilizar una búsqueda secuencial.
Supongo que establecida una fila de la tabla valuación, proyecta el valor
de la columna nom_id para obtener la correspondiente fila relacionada de
nomenclador2, y esta tabla, de unas 1200 filas, tiene como clave primaria
justamente a nom_id. Entonces, porque el planificador dice que va a
utilizar una búsqueda secuencial? No sería lo lógico que utilice un acceso
por índice?
Desde ya muchas gracias por las aclaraciones que me puedan brindar y por
tomarse el tiempo de leer todo esto.
Saludos.
Guillermo Villanueva
From | Date | Subject | |
---|---|---|---|
Next Message | Alfredo Guzman Pacherres | 2014-12-18 13:52:27 | Streaming replication |
Previous Message | Manuel Aller | 2014-12-16 18:27:08 | Re: AYUDA |