Re: Seq Scan

From: raul andrez gutierrez alejo <raulandrez(at)gmail(dot)com>
To: "Guillermo E(dot) Villanueva" <guillermovil(at)gmail(dot)com>
Cc: pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Seq Scan
Date: 2014-12-18 13:52:44
Message-ID: CAHQFj73Umx3APvUUKXeat6h4QNKhFkqQ=NCxOpspTdh1B27ciQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola Guillermo.

el planificador de postgres realizar un Seq Scan si el 80% de los datos de
una tabla va a ser leídos y para este caso son 1096 rows de 1200(91%), se
puede desactivar el seq scan para una consulta especifica con set
enable_seqscan = off , o en el config para todo el motor lo cual no es
muy recomendable, yo recomiendo que ejecute un explain analyze y compara
los rows estimado y rows obtenido si hay mucha diferencia se debe aumentar
el tamaño de las estadísticas con ALTER TABLE nomenclador ALTER COLUMN
nom_id SET STATISTICS 500; y realizar un vacuum analyze en la tabla
nomenclador,
si los registros del select si son 1096 es mas eficiente un seq scan que
solo lee el 91% de los datos, que un index scan que primero un indice y
luego el 91% de los datos.

El 18 de diciembre de 2014, 8:30, Guillermo E. Villanueva <
guillermovil(at)gmail(dot)com> escribió:
>
> 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
>
>

--
Raul Andres Gutierrez Alejo

In response to

  • Seq Scan at 2014-12-18 13:30:51 from Guillermo E. Villanueva

Responses

  • Re: Seq Scan at 2014-12-18 14:18:18 from Guillermo E. Villanueva

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Gilberto Castillo 2014-12-18 14:00:43 Re: Streaming replication
Previous Message Alfredo Guzman Pacherres 2014-12-18 13:52:27 Streaming replication