Guia del Programador de PostgreSQL | ||
---|---|---|
Anterior | Capítulo 23. Revisión de las características internas de PostgreSQL | Siguiente |
El ejecutor toma el plan devuelto por el planificador/optimizador y arranca procesando el nodo superior. En el caso de nuestro ejemplo (la consulta dada en el ejemplo \ref{simple_select}), el nodo superior es un nodo Cruce Mezclado (MergeJoin).
Antes de poder hacer ninguna mezcla, se deben leer dos tuplas, una de cada subplan. De este modo, el ejecutor mismo llama recursivamente a procesar los subplanes (arranca con el subplan unido al árbol izquierdo). El nuevo nodo superior (el nodo superior del subplan izquierdo) es un nodo SeqScan, y de nuevo se debe tomar una tupla antes de que el nodo mismo pueda procesarse. El ejecutor mismo llama recursivamente otra vez al subplan unido al árbol izquierdo del nodo SeqScan.
El nuevo nodo superior es un nodo Sort. Como un sort se debe realizar sobre la relación completa, el ejecutor arranca leyendo tuplas desde el subplan del nodo Sort y las ordena en una relación temporal (en memoria o en un fichero) cuando se visita por primera vez el nodo Sort. (Posteriores exámenes del nodo Sort devolverán siempre únicamente una tupla de la relación temporalmente ordenada).
Cada vez que el procesado del nodo Sort necesita de una nueva tupla, se llama de forma recursiva al ejecutor para que trate el nodo SeqScan unido como subplan. La relación (a la que se refiere internamente por el valor dado en el campo scanrelid) se recorre para encontrar la siguiente tupla. Si la tupla satisface la cualificación dada por el árbol unido a qpqual se da por buena para su tratamiento, y en otro caso se lee la siguiente tupla hasta la primera que satisfaga la cualificación. Si se ha procesado la última tupla de la relación, se devuelve un puntero NULL.
Una vez que se ha recuperado una tupla en el árbol izquierdo del Cruce Mezclado (MergeJoin), se procesa del mismo modo el árbol derecho. Si se tienen presentes ambas tuplas, el ejecutor procesa el Cruce Mezclado. Siempre que se necesita una nueva tupla de uno de los subplanes, se realiza una llamada recursiva al ejecutor para obtenerla. Si se pudo crear una tupla para cruzarla, se devuelve y se da por terminado el procesado completo de árbol del plan.
Se realizan ahora los pasos descritos para cada una de las tuplas, hasta que se devuelve un puntero NULL para el procesado del nodo Cruce Mezclado, indicando que hemos terminado.