|
Hola a todos: Para tratar de entender un comportamiento concreto del planificador de consultas, he creado una base de datos de ejemplo con 2 tablas: una llamada fathers (father_id, full_name) y otra llamada sons (son_id, father_id, full_name). Como es evidente, existe una relación muchos-a-uno de los hijos hacia los padres. Bien, mi duda surge al ejecutar esta sencilla sentencia: select f.father_id, s.son_idAnalizando el plan de la consulta (anteponiendo "analyze" a ésta) aparece esto: Hash Join (cost=15.34..31.26 rows=166 width=8)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")? He probado a llenar las tablas con 10 millones de registros y, tras ejecutar "analyze", el resultado es el mismo. Muchas gracias. |
- [pgsql-es-ayuda] Tratando de entender un plan de consulta c... Igor
