You are on page 1of 3

Algoritmos para procesamiento y optimizacin de consultas Una consulta SQL debe primeramente ser explorada, analizada sintcticamente y validada.

El analizador lxico identifica los elementos del lenguaje tales como las palabras reservadas, los nombres de atributos y de las relaciones en la consulta, mientras que el analizador sintctico comprueba la sintaxis de la consulta para determinar si ha sido formulada de acuerdo a las reglas de sintaxis del lenguaje de consultas. La consulta debe ser tambin validada, comprobando que todos los nombres de atributos y de relaciones son vlidos y tienen significado semntico dentro del esquema de la base de datos. A continuacin, se crear una representacin interna de la consulta; normalmente mediante un rbol de consultas o utilizando una estructura de datos en grafo denominada grafo de consulta. Seguidamente, el DBMS debe desarrollar una estrategia de ejecucin para resolver la consulta a partir de los ficheros de base datos. El proceso de eleccin de la estrategia ms adecuada se conoce como optimizacin de consultas. Los pasos a seguir en la ejecucin de una consulta de alto nivel son: El optimizador de consultas genera un plan de ejecucin y el generador de cdigo el cdigo para ejecutar dicho plan. El procesador de base de datos en tiempo de ejecucin tiene ejecuta el cdigo, en modo compilado o en modo interpretado, para generar el resultado de la consulta. Si se produce un error se generar un mensaje de error. Sin embargo en algunos casos el plan de ejecucin elegido no es la estrategia ms ptima (se trata de una estrategia razonablemente eficiente para ejecutar la consulta). La bsqueda de la estrategia ms ptima consume demasiado tiempo excepto con consultas ms sencillas y es posible que se necesite informacin sobre los ficheros e incluso sobre el contenido de los mismos. Por tanto, la planificacin de una estrategia de ejecucin puede llegar a requerir una descripcin ms detallada que en el caso de la optimizacin de consultas. En el caso de los lenguajes de navegacin por bases de datos de nivel ms bajo, el programador debe elegir la estrategia de ejecucin de consultas a la hora de escribir un programa de bases de datos. Si un DBMS proporciona nicamente un lenguaje de navegacin, las necesidades de optimizacin por parte del DBMS resultan ser muy limitadas; en lugar de esto, al programador se le da la posibilidad de elegir la estrategia de ejecucin ptima. Por otra parte, un lenguaje de consultas de alto nivel es ms expresivo ya que especifica cules son los resultados esperados de la consulta en lugar de identificar los detalles sobre cmo se debera obtener el resultado. La optimizacin de consultas s resulta necesaria en el caso de consultas especificadas en un lenguaje de alto nivel.

Un DBMS relacional debe evaluar de forma sistemtica las distintas estrategias de ejecucin de consultas y elegir una estrategia razonablemente ptima. Todos los DBMS disponen por lo general de varios algoritmos genricos de acceso a bases de datos que implementan operaciones relacionales. Slo las estrategias de ejecucin que pueden ser implementadas por los algoritmos de acceso del DBMS y que se aplican a una consulta en particular y a un diseo de base de datos en particular son las que pueden ser tomadas en consideracin por el mdulo de optimizacin de consultas. Existen dos tcnicas principales para la construccin de las optimizaciones de consultas. La primera tcnica se basa en reglas heursticas para la ordenacin de las operaciones a realizar en una estrategia de ejecucin de una consulta. Normalmente, las reglas reordenan las operaciones en un rbol de consultas. La segunda de las tcnicas implica una estimacin sistemtica del coste de las diferentes estrategias de ejecucin y la eleccin del plan de ejecucin con la estimacin de coste ms baja. Normalmente, estas tcnicas se combinan en un optimizador de consultas. Traduccin de consultas SQL al lgebra relacional Una consulta SQL se traduce, en primer lugar, a una expresin extendida equivalente de lgebra relacional (representada como una estructura de datos de rbol de consultas) que es optimizada posteriormente. Por regla general, las consultas SQL se descomponen en bloques de consulta que forman las unidades bsicas que se pueden traducir a los operadores algebraicos y despus ser optimizadas. Un bloque de consulta contiene una nica expresin SELECT-FROM-WHERE, y tambin clusulas GROUP BY y HAVING en el caso de que stas formen parte del bloque. Por tanto, las consultas anidadas dentro de una consulta se identifican como bloques de consulta independientes. Debido a que SQL incluye operadores de agregacin (como MAX, MIN, SUM y COUNT), estos operadores deben ser tambin incluidos en el lgebra extendida. Por ejemplo, una consulta donde exista una subconsulta anidada debera ser descompuesta en dos bloques. El optimizador de consultas seleccionara a continuacin un plan de ejecucin para cada bloque. Algoritmos para ordenacin externa La ordenacin es uno de los algoritmos principales utilizados en el procesamiento de las consultas. La ordenacin es tambin un componente clave en los algoritmos de ordenacin y mezclado utilizados en las operaciones de JOIN y en algunas otras (como UNION y INTERSECTION), y en los algoritmos de eliminacin de duplicados de la operacin PROYECTO (cuando en una consulta SQL se especifica la opcin DISTINCT en la clusula SELECT). Es posible evitar la ordenacin si existe el ndice adecuado que permita un acceso ordenado a los registros. La ordenacin externa tiene relacin con los algoritmos de ordenacin que son adecuados para los ficheros de tamao grande con registros almacenados en disco que no caben en su totalidad en la memoria principal, como sucede con la mayora de los ficheros de bases de datos.

El algoritmo de ordenacin externa ms habitual es el que utiliza una estrategia de ordenacin-mezcla, que comienza con la ordenacin de pequeos subficheros (denominados porciones) del fichero principal y, a continuacin, mezcla esos subficheros ordenados para crear subficheros ordenados ms grandes que, a su vez, sern mezclados nuevamente. El algoritmo de ordenacin-mezcla, al igual que los algoritmos de bases de de datos, necesita de un espacio temporal en memoria principal donde se realiza la ordenacin y la mezcla de las porciones. Durante la fase de ordenacin, las porciones del fichero que caben en el espacio temporal disponible se leen en memoria principal, se ordenan utilizando un algoritmo de ordenacin interna y se vuelven a escribir en disco en forma de subficheros temporales ordenados (o porciones). El tamao de una porcin y el nmero inicial de porciones (nR) viene marcado por el nmero de bloques de fichero (b) y el espacio temporal disponible (nB). En la fase de mezclado, las porciones ordenadas se mezclan en una o ms pasadas. El grado de mezclado (dM) es el nmero de porciones que pueden ser mezcladas en cada pasada. Se necesita un bloque de espacio temporal en cada pasada para almacenar un bloque de cada una de las porciones que estn siendo mezcladas y se necesita otro bloque que contenga un bloque del resultado de la mezcla. Segn esto, dM es el valor ms pequeo entre (nB - 1) Y nR, Y el nmero de pasadas es [(logdM (nR)].

You might also like