<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Hola a todos:<br>
    <br>
    Para tratar de entender un comportamiento concreto del planificador
    de consultas, he creado una base de datos de ejemplo con 2 tablas:
    una llamada <b>fathers (father_id, full_name)</b> y otra llamada <b>sons
      (son_id, father_id, full_name)</b>. Como es evidente, existe una
    relación muchos-a-uno de los hijos hacia los padres.<br>
    <br>
    Bien, mi duda surge al ejecutar esta sencilla sentencia:<br>
    <blockquote><tt>select f.father_id, s.son_id<br>
        from fathers f<br>
        join sons s on s.father_id = f.father_id<br>
        where f.father_id < 10;</tt><br>
      <br>
    </blockquote>
    Analizando el plan de la consulta (anteponiendo "analyze" a ésta)
    aparece esto:<br>
    <blockquote><tt>Hash Join  (cost=15.34..31.26 rows=166 width=8)<br>
          Hash Cond: (s.father_id = f.father_id)<br>
          <b>->  Seq Scan on sons s  (cost=0.00..13.10 rows=310
          width=8)</b><br>
          ->  Hash  (cost=14.00..14.00 rows=107 width=4)<br>
                ->  Seq Scan on fathers f  (cost=0.00..14.00 rows=107
        width=4)<br>
                      Filter: (father_id < 10)</tt><br>
      <br>
    </blockquote>
    Supongo que se me está escapando algo importante pero, ¿Por que en
    esa línea marcada en negrita (la búsqueda secuencial en "sons") el
    planificador no restringe la búsqueda también a aquellos hijos con
    código de padre menor a 10, como hace al buscar los padres?
    ¿Significa este plan que pese a obtener 10 padres, luego recorre
    absolutamente todos los hijos y no sólo los que tienen código de
    padre menor que 10 (pese a que hay un índice "btree" creado en la
    columna "father_id" de la tabla "sons")?<br>
    <br>
    He probado a llenar las tablas con 10 millones de registros y, tras
    ejecutar "analyze", el resultado es el mismo.<br>
    <br>
    Muchas gracias.<br>
  </body>
</html>