Seq Scan

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

Responses

  • Re: Seq Scan at 2014-12-18 13:52:44 from raul andrez gutierrez alejo

Browse pgsql-es-ayuda by date

  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