Re: Índices sobre constraints foreign key

From: Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>
To: "Ivan Perales M(dot)" <ivan(dot)perales(at)gmail(dot)com>
Cc: Ayuda Esp PostgreSQL <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Índices sobre constraints foreign key
Date: 2017-06-10 12:39:15
Message-ID: 20170610123915.yp4ogufxm7ylrzxn@alvherre.pgsql
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Ivan Perales M. escribió:

> En algun momento del pasado, honestamente no recuerdo si leí o escuché que
> postgres por default creaba indices sobre las columnas que tienen un
> constraint foreign key.

Si leíste o escuchaste eso, la persona que habló o escribió estaba
tristemente equivocado.

> Nested Loop Left Join (cost=0.00..3.28 rows=1 width=8)
> Join Filter: (p.id = e.producto_id)
> -> Seq Scan on productomovimiento e (cost=0.00..1.00 rows=1 width=8)
> Filter: (producto_id = 10)
> -> Seq Scan on producto p (cost=0.00..2.26 rows=1 width=4)
> Filter: (id = 10)
>
> Estoy viendo que realiza un escaneo secuencial para filtrar los movimientos
> de cierto producto, yo esperaria que utilizara un indice.

La verdad es que la existencia de un índice no obliga a que se lo use,
dependiendo de la consulta y dependiendo de otros factores como el
tamaño de la tabla -- si la tabla es muy pequeña es más rápido
recorrerla secuencialmente. Pero si el índice no existe, obviamente no
hay alternativa.

Prueba \d en psql para verificar si el índice existe.

> Esto significa que efectivamente debo crear un indice manualmente en
> cada columna con el constraint foreign key?

... o índices multi-columna.

> si es así, por que el left join funciona muy rápido aun cuando se
> tengan algunos cientos de miles de filas?

Habría que ver el EXPLAIN ANALYZE. Según el fragmento de EXPLAIN que
pegaste, no hay miles de registros sino un puñado.

--
Álvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

-
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

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Francisco Olarte 2017-06-10 15:09:48 Re: [pgsql-es-ayuda] Índices sobre constraints foreign key
Previous Message Ivan Perales M. 2017-06-10 05:12:30 Re: [pgsql-es-ayuda] Índices sobre constraints foreign key