Está en la página 1de 37

Administración Base de Datos

Optimización de Consultas

Ing. Maverick Moya

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.

5. Obtención de resultados (Fetching Results): Finalmente, se obtienen los resultados de la consulta,


que pueden ser devueltos al cliente o utilizados para realizar operaciones adicionales, como
actualizaciones, inserciones o eliminaciones.
Optimización de Consultas
Algoritmo de Ordenación Externa

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.

El algoritmo de ordenación-mezcla, necesita de un espacio temporal en memoria principal donde se


realiza la ordenación y la mezcla de las porciones.
Algoritmo de Ordenación Externa

ID NOMBRE ID NOMBRE ID NOMBRE


1 Sofia Ramirez 5 Ana Torres 1 Ana Torres
2 Javier Gonzalez 2 Camila Rodriguez
*
3 Valeria Martinez * 3 Diego Herrera
ID NOMBRE
4 Diego Herrera 4 Javier Gonzalez
2 Javier Gonzalez
5 Ana Torres 5 Juan Cruz
6 Juan Cruz
6 Juan Cruz 6 Mateo Lopez
7 Valentina Suarez * 7 Nicolas Fernández
* Sofia Ramirez
8 Mateo Lopez ID NOMBRE 8
9 Camila Rodriguez 3 Valeria Martinez 9 Valentina Suarez
10 Nicolas Fernández 7 Valentina Suarez 10 Valeria Martinez
Operación SELECT

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

Métodos de búsqueda en una selección simple.


Es posible utilizar varios algoritmos de búsqueda para realizar la selección de registros en un fichero.
Estos algoritmos se conocen en muchos casos como exploraciones de fichero, ya que exploran los
registros del fichero en el que se realiza la búsqueda y encuentran los registros que satisfacen una
condición de selección.

Si el algoritmo de búsqueda implica la utilización de un índice, esta búsqueda mediante un índice se


denomina exploración indexada.
Operación SELECT
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.

SELECT DNI, NOMBRE


FROM EMPLEADO;

SELECT NOMBRE, APELLIDO


FROM EMPLEADO;

SELECT NOMBRE, SUELDO


FROM EMPLEADO;
Operación SELECT

S2—Búsqueda binaria. Si la condición de selección implica una comparación de igualdad sobre un


atributo clave con el que está ordenado el fichero se puede utilizar la búsqueda binaria, que es más
eficaz que la búsqueda lineal.

Un ejemplo es OP1 si DNI es el atributo de ordenación para el fichero EMPLEADO.

SELECT DNI, NOMBRE


FROM EMPLEADO
WHERE DNI = ‘123456789’;
Operación SELECT

S3—Utilización de un índice primario (o clave hash o clave de dispersión). Si la condición de


selección implica una comparación de igualdad sobre un atributo clave con un índice primario (o clave
hash), se utilizará el índice primario para encontrar el registro. Con esta condición se extrae un único
registro (como mucho).

Un ejemplo es OP1 si DNI es el atributo de ordenación para el fichero EMPLEADO.

SELECT DNI, NOMBRE


FROM EMPLEADO
WHERE DNI = ‘123456789’;
Operación SELECT

S4—Utilización de un índice primario para encontrar varios registros. Si la condición de comparación


es >, >=, <, o <= sobre un campo clave con un índice primario, se utilizará el índice para encontrar el
registro que satisfaga la correspondiente condición de igualdad, para luego, extraer los registros
posteriores en el fichero ordenado.

SELECT NumeroDpto, NOMBRE


FROM DEPARTAMENTO
WHERE NumeroDpto > 5;
Operación SELECT

S5—Utilización de un índice agrupado para encontrar varios registros. Si la condición de selección


implica una comparación de igualdad sobre un atributo que no es clave mediante un índice agrupado (por
ejemplo, Dno = 5 en OP3), se utilizará el índice para extraer todos los registros que cumplan la
condición.

SELECT DNI, NOMBRE


FROM EMPLEADO
WHERE Dno = 5;
Operación SELECT

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

Métodos de búsqueda en selecciones complejas.


Esto se da cuando la condición de una operación SELECT es una condición conjuntiva (es decir, si está formada por
varias condiciones simples conectadas mediante la conjunción lógica AND).

SELECT DNI, NOMBRE


FROM EMPLEADO
WHERE Dno = 5
AND Sueldo > 30000
AND Sexo = ‘F’;
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

S9—Selección conjuntiva mediante intersección de punteros a registros. Si se encuentran


disponibles índices secundarios sobre más de uno de los campos implicados en condiciones simples de la
condición conjuntiva, y si los índices incluyen punteros a registros entonces se puede utilizar cada uno
de los índices para extraer el conjunto de punteros a registros que satisfacen la condición individual.
La intersección de estos conjuntos de punteros a registros da como resultado los punteros a registros
que satisfacen la condición conjuntiva y que serán utilizados posteriormente para extraer esos registros
de forma directa.
Si sólo tienen índices secundarios algunas de las condiciones, cada uno de los registros extraídos será
revisado posteriormente para determinar si cumple las condiciones restantes.
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

Métodos para la implementación de concatenaciones.


J1—Concatenación de bucle anidado (fuerza bruta). Para cada registro t de R (bucle externo),
obtiene todos los registros s de S (bucle interno) y comprueba si los dos registros satisfacen la
condición de concatenación t [A] = s[B].

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

J3—Concatenación de ordenación-mezcla. Si los registros de R y S se encuentran físicamente clasi-


ficados (ordenados) por el valor de los atributos de concatenación A y B respectivamente, podemos
implementar la concatenación del modo más eficiente posible. Ambos ficheros serán explorados
concurrentemente siguiendo el orden de los atributos de concatenación y emparejando los registros que
tienen los mismos valores para A y B. Si los ficheros no se encuentran ordenados, podrían ser ordenados
previamente mediante una ordenación externa.

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

J4—Concatenación de dispersión (hash). Los registros de los ficheros R y S se encuentran


clasificados en el mismo fichero de dispersión, utilizando la misma función de dispersión sobre los
atributos A de R y B de S como claves de dispersión.
En primer lugar, una única pasada sobre el fichero con menor número de registros (por ejemplo, R )
reparte sus registros en los bloques del fichero de dispersión.
En la segunda fase, se hace una única pasada por el otro fichero (S) tomando cada uno de los registros,
probando en el bloque adecuado y emparejándolos con los registros correspondientes de R en ese
bloque.
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 acceso al almacenamiento secundario. Es el coste de la búsqueda, lectura y escritura de


bloques de datos que residen en almacenamiento secundario, principalmente en disco. El coste de la
búsqueda de registros en un fichero depende del tipo de las estructuras de acceso a dicho fichero.

• Coste de almacenamiento. Es el coste de almacenamiento de los ficheros intermedios generados por


una estrategia de ejecución de la consulta.

• Coste computacional. Es el coste de la ejecución de operaciones en memoria sobre los búferes de


datos durante la ejecución de la consulta. Este tipo de operaciones incluye la búsqueda y la
ordenación de los registros, la mezcla de registros durante una concatenación y la ejecución de
cálculos sobre valores de los campos.
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.

También podría gustarte