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@postgresql.org) Para cambiar tu suscripción: http://www.postgresql.org/mailpref/pgsql-es-ayuda