Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Administración de Base de Datos - Optimización de Consultas
Administración de Base de Datos - Optimización de Consultas
Optimización de Consultas
2Q 2024
Optimización de Consultas
Una consulta de base de datos que se encuentra expresada en un lenguaje de alto nivel (SQL), conlleva
todo un proceso para poder retornar la información solicitada mediante la sentencia especificada. Esta
sentencia debe de ser explorada, analizada y validada antes de retornar la información.
• El analizador léxico identifica los elementos del lenguaje (las palabras reservadas de SQL, los
nombres de atributos y los nombres de las relaciones) en el texto de la consulta.
• El analizador sintáctico comprueba la sintaxis de la consulta para determinar si ha sido formulada
con arreglo a las reglas de sintaxis (las reglas de la gramática) del lenguaje de consultas.
La consulta debe ser también validada, comprobando que todos los nombres de atributos y de relaciones
son válidos y tienen significado semántico dentro del esquema de la base de datos en particular sobre la
cual se realiza la consulta.
Optimización de Consultas
SQL es el lenguaje de consultas más utilizado en las bases de datos relacionales. Una consulta SQL
inicialmente es traducida a una expresión extendida equivalente de álgebra relacional, que es optimizada
posteriormente.
Por regla general, las consultas SQL se descomponen en bloques de consulta que forman las unidades
básicas que se pueden traducir a los operadores algebraicos y después ser optimizadas.
Optimización de Consultas
1. Análisis sintáctico (Parsing): La consulta SQL se analiza para verificar la sintaxis y la gramática. Si
hay errores sintácticos, se produce un error y la consulta no se ejecuta.
2. Análisis semántico (Semantic Analysis): Después de pasar el análisis sintáctico, se realiza un análisis
semántico para verificar la validez de la consulta en relación con el esquema de la base de datos. Se
comprueba si las tablas y columnas mencionadas existen, si el usuario tiene los permisos necesarios,
etc.
3. Optimización de consultas (Query Optimization): El motor de base de datos busca la mejor manera
de ejecutar la consulta para obtener resultados de manera eficiente. Esto puede implicar la
reorganización de las operaciones, la elección de los índices adecuados, la determinación del mejor
plan de ejecución, entre otras técnicas de optimización.
Optimización de Consultas
4. Ejecución del plan de ejecución (Execution Plan Execution): Se ejecuta el plan de ejecución
generado durante la fase de optimización. Esto puede implicar la lectura de datos de las tablas, la
aplicación de filtros, la unión de conjuntos de datos, la ordenación de resultados, etc.
La ordenación es uno de los algoritmos principales utilizados en el procesamiento de las consultas. Siempre que en una
consulta SQL se especifique una cláusula ORDER BY, el resultado de la consulta debe ser ordenado.
ID NOMBRE ID NOMBRE
SELECT ID, NOMBRE
1 Allan Santos 1 Allan Santos
FROM EMPLEADO 2 Mario López 4 Belkis Oviedo
ORDER BY NOMBRE 3 Mario Zelaya 2 Mario López
4 Belkis Oviedo 3 Mario Zelaya
Algoritmo de Ordenación Externa
La ordenación externa tiene relación con los algoritmos de ordenación que son adecuados para los
ficheros de tamaño grande con registros almacenados en disco que no caben en su totalidad en la
memoria principal, como sucede con la mayoría de los ficheros de bases de datos.
El algoritmo de ordenación externa más habitual es el que utiliza una estrategia de ordenación-mezcla,
que comienza con la ordenación de pequeños subficheros (denominados porciones) del fichero principal y,
a continuación, mezcla esos subficheros ordenados para crear subficheros ordenados más grandes que,
a su vez, serán mezclados nuevamente.
Existen múltiples opciones a la hora de ejecutar una operación SELECT, muchas de estas dependen de
las rutas de acceso específicas al fichero y quizá sólo se apliquen a determinados tipos de condiciones
de selección.
Operación SELECT
S1—Búsqueda lineal (fuerza bruta). Extraer todos los registros del fichero y comprobar si sus valores
de atributos satisfacen la condición de selección.
S6—Utilización de un índice secundario (árbol B+) sobre una comparación de igualdad. Este método
de búsqueda se puede utilizar para extraer un único registro si el campo indexado es una clave (tiene
valores únicos) o para extraer varios registros si el campo indexado no es clave. Esto también se puede
utilizar en las comparaciones del tipo >, >=, <=.
Árbol B+
En un árbol B, cada valor del campo de búsqueda aparece una vez en algún nivel del árbol, junto con un
puntero de datos. En un árbol B+ los punteros a datos se almacenan sólo en los nodos hoja del árbol, por
lo cual, la estructura de los nodos hoja difiere de la de los nodos internos.
Los nodos hoja tienen una entrada por cada valor del campo de indexación, junto con un puntero al
registro (o al bloque que contiene ese registro) si el campo de búsqueda es un campo clave.
En el caso de un campo de búsqueda que no es clave, el puntero apunta a un bloque que contiene punteros
a los registros del fichero de datos, creándose un nivel extra de indirección.
Árbol B+
Operación SELECT
S7—Selección conjuntiva utilizando un índice individual. Si un atributo implicado en cualquier condición simple y única
de la condición conjuntiva tiene una ruta de acceso que permite el uso de uno de los métodos S2 a S6, se utilizará esa
condición para extraer los registros y, posteriormente, comprobar si cada registro extraído satisface las condiciones
simples restantes de la condición conjuntiva.
Operación SELECT
S8—Selección conjuntiva utilizando un índice compuesto. Si dos o más atributos están implicados en condiciones de
igualdad de la condición conjuntiva y existe un índice compuesto (o estructura hash) sobre los campos, podemos
utilizar el índice directamente.
SELECT *
FROM TRABAJA_EN
WHERE DniEmpleado = ‘123456789’
AND NumProy = 10;
Operación SELECT
Cuando el optimizador del DBMS tiene que elegir entre las distintas condiciones simples dentro de una
condición de selección conjuntiva, lo que hace normalmente es tener en cuenta la selectividad de cada
una de las condiciones.
La selectividad se define como la relación entre el número de registros (tuplas) que satisfacen la
condición y el número total de registros (tuplas) del fichero y, de acuerdo con esto, es un número entre
cero y 1 (selectividad cero significa que ningún registro satisface la condición y 1 significa que todos los
registros satisfacen la condición).
Operación SELECT
Con una condición disyuntiva no se puede realizar demasiada optimización, ya que los registros que
satisfacen la condición disyuntiva son la unión de los registros que satisfacen las condiciones
individuales.
Una condición disyuntiva (en la cual las condiciones simples están conectadas mediante la operación
lógica OR en lugar de estarlo mediante AND) es mucho más difícil de procesar y optimizar que una
condición de selección conjuntiva.
Por lo anterior, nos podremos ver obligados a utilizar el modelo de búsqueda de fuerza bruta lineal.
Operación JOIN
La operación JOIN es una de las operaciones que más tiempo consumen durante el procesamiento de una
consulta.
Existen muchas maneras de implementar una operación de concatenación que involucre a dos ficheros
(concatenación de dos vías). Las concatenaciones que involucran a más de dos ficheros se denominan
concatenaciones multivía. El número de vías posibles para ejecutar concatenaciones multivía crece con
mucha rapidez.
Operación JOIN
EMPLEADO DEPARTAMENTO
ID NOMBRE DNO ID NOMBRE
1 Allan Santos 1 1 Finanzas
2 Mario López 2 2 Tecnología
3 Mario Zelaya 2 3 Recursos Humanos
4 Belkis Oviedo 1
Operación JOIN
J2—Concatenación de bucle simple (utilizando una estructura de acceso para obtener los registros
que cumplen la condición). Si existe un índice para uno de los atributos de la concatenación (por
ejemplo, B de S), obtiene todos los registros t de R, uno a la vez (bucle simple), y a continuación utiliza
la estructura de acceso para obtener directamente todos los registros s de S que cumplen s[B] t [A].
EMPLEADO DEPARTAMENTO
ID NOMBRE DNO ID NOMBRE
1 Allan Santos 1 1 Finanzas
2 Mario López 2 2 Tecnología
3 Mario Zelaya 2 3 Recursos Humanos
4 Belkis Oviedo 1
Operación JOIN
EMPLEADO DEPARTAMENTO
ID NOMBRE DNO ID NOMBRE
1 Allan Santos 1 1 Finanzas
2 Mario López 1 2 Tecnología
3 Mario Zelaya 2 3 Recursos Humanos
4 Belkis Oviedo 2
Operación JOIN
Un índice hash es una estructura de datos utilizada en bases de datos para permitir un acceso rápido a
los registros en una tabla. Este índice utiliza una función de dispersión (o función hash) para mapear las
claves de búsqueda a ubicaciones específicas en una tabla de dispersión.
• Función de dispersión: Es una función matemática que toma una clave de búsqueda y la convierte en
una dirección de memoria o posición en la tabla hash.
• Tabla hash: Es una estructura de datos que consta de un conjunto de celdas o "buckets", donde cada
celda almacena uno o más registros que comparten el mismo valor hash. En un índice hash, la tabla
hash se utiliza para almacenar referencias a los registros de la tabla principal de la base de datos.
Operación JOIN
Tabla_Hash
IDHASH IDEMPLEADO
1 1,2
2 3,4
3
EMPLEADO
ID NOMBRE DNO
1 Allan Santos 1
2 Mario López 1
3 Mario Zelaya 2
4 Belkis Oviedo 2
Operación JOIN
Tabla_Hash Tabla_Hash
IDHASH IDEMPLEADO IDHASH IDEMPLEADO
1 1,Allan Santos 1 1, Finanzas
2 2,Mario López 2 2, Tecnología
3 3
EMPLEADO
DEPARTAMENTO
ID NOMBRE DNO
ID NOMBRE
1 Allan Santos 1
1 Finanzas
2 Mario López 1
2 Tecnología
3 Mario Zelaya 2
3 Recursos Humanos
4 Belkis Oviedo 2
Costes de Optimización de Consultas
El modelo de optimización de consultas basada en costes consiste en calcular y comparar los costes
de ejecución de una consulta utilizando diferentes estrategias de ejecución y elegir la estrategia con el
menor coste estimado. Para que funcione este modelo se necesitan estimaciones de coste precisas para
que la comparación entre las diferentes estrategias se realice de forma real.
Este modelo es más adecuado en consultas compiladas en las cuales la optimización se realiza en tiempo
de compilación, y el código para la estrategia de ejecución resultante se almacena y se ejecuta
directamente en tiempo de ejecución.
En el caso de las consultas interpretadas en las cuales todo el proceso se realiza en tiempo de ejecución,
una optimización a gran escala podría ralentizar el tiempo de respuesta.
Costes de Optimización de Consultas
• Coste de uso de memoria. Es el coste relativo al número de búferes de memoria que se necesitan
durante la ejecución de la consulta.
• Coste de comunicaciones. Es el coste del envío de la consulta y de sus resultados desde el sitio donde
se ubica la base de datos hasta el sitio o el terminal donde se origin ó́ la consulta.