Implementación de operaciones sobre conjuntos
- Unión (RUS)
- Intersección (R
- Diferencia (R-S)
- Producto cartesiano.

- La unión, intersección y diferencia sólo se aplican a relaciones compatibles con la unión, es decir, que tengan los mismos atributos (número y definidos en el mismo contexto).
- Ordenar las dos relaciones según los mismos atributos
- Con una sola pasada se obtiene el resultado
RUS: Se examinan los archivos de forma concurrente
- Cuando se encuentra la misma tupla en ambas relaciones, sólo se conserva una.
R
En la unión, intersección y diferencia se puede utilizar la dispersión, llevándolas a la misma cubeta del archivo.
RUS: Se dispersan los registros de R al archivo de dispersión, luego dispersar los registros de S en el cual no se insertan los registros repetidos.
RUS: Se dispersan todos los registros de R luego los registros de S, si se encuentra un registro idéntico en la cubeta se añade el registro al archivo resultado.
R-S: Se dispersan los registros de R, luego los de S, si se encuentra un archivo idéntico en la cubeta, se elimina toda esa tupla.

Empleo de la heurística en la optimización de consultas SQL
SQL1.
Select Proyecto.noProyecto,
Depto.noDepto,
Empleado.dirección,
Empleado.fechaNac
From Proyecto, Depto, Empleado
Where Proyecto.noDepto=Depto.noDepto
and Proyecto.lugar=”México”;
1) Árbol canónico
a) Operaciones de producto cartesiano (X)
b) Restricciones de selección (σ)
Un árbol de consulta:
Estructura en forma de árbol corresponde a una expresión del álgebra relacional.
- Representa las relaciones de entrada como nodo hoja
- Operaciones del algebra relacional los nodos internos.
Árbol canónico: Estructura en forma de árbol corresponde a una consulta en SQL sin efectuar optimización alguna.
1) Se aplica el producto cartesiano de las relaciones que aparecen en la cláusula FROM (de derecha a izq).
2) Las condiciones de selección y reunión de la cláusula WHERE, seguida de la proyección sobre los atributos que aparecen en la cláusula SELECT.
1. Obtener el árbol canónico a partir de la consulta SQL 1

Transformación de una expresión algebraica a un árbol de consulta
Ejemplo 1
noProyecto.noDepto,apellido,dirección,fechaNac(((σlugarP=”México”(Proyecto))|X|noDepto=noDepto(Depto)) |X|noEmpGerente=noEmp(Empleado))
Ejemplo 1
Árbol de consulta

Ponemos los atributos de la proyección como raíz del árbol. Después empezamos a resolver los paréntesis de derecha a izquierda,
Optimización de consultas por heurística
SQL 2
Select Empleado.apellido
From Empleado, TrabajaEn, Proyecto
Where Proyecto.nombreP=”Rediseño 2008”
and Proyecto.noProyecto=TrabajaEn.noProyecto
and TrabajaEn.noEmp=Empleado.noEmp
and Empleado.fechaNac > “31/12/1985”;
1) Obtener el árbol canónico

2) Considerar las restricciones de (σ)

Aquí vemos que la selección nombreP=”Rediseño” nos estaría dando de resultado una sola tupla, mientras que Empleado nos da algunas y TrabajaEn todas.
3) Aplicar conmutatividad entre las relaciones donde se aplica el producto cartesiano (menor # tuplas)

4) Identificar la operación de reunión en el árbol de consulta

5) Acomodar las proyecciones en el árbol de consulta
Tomamos todos los atributos de las tablas y vemos cuales son relevantes, las demás se quitan.

6) Generar expresión algebraica del árbol de consulta
apellido[((
noProyecto,nombreP(σnombreP=”Rediseño 2008”(Proyecto))) |X|noProyecto=noProyecto
noEmp,noProyecto(TrabajaEn)) |X|noEmp=noEmp
noEmp,apellido,fechaNac(σfechaNac>”31/12/1985”(Empleado))]
Ejemplo SQL 3
Select Alumno.noBoleta,
Alumno.nombre,
From Alumno,AMateria,Materia,Prof
Where Prof.nombre=”Nancy Ocotitla”
And Materia.materia=”BD I”
And Alumno.noBoleta=AMateria.noBoleta
And AMateria.codMat=Materia.codMat
And Materia.codProf=Prof.codProf;

1) Obtener el árbol canónico

2) Considerar las restricciones de (σ)

3) Aplicar conmutatividad entre las relaciones donde se aplica el producto cartesiano (menor # tuplas)
En este caso Materia y Prof nos van a dar una tupla al momento de aplicar la restricción de selección. Hay que ver de qué forma están relacionadas las tablas para saber cual podemos mover sin alterar el orden de relación (llaves).

4) Identificar la operación de reunión en el árbol de consulta

5) Acomodar las proyecciones en el árbol de consulta

6) Generar expresión algebraica del árbol de consulta
noBoleta,nombre[((
codProf(σnombre=”Nancy Ocotitla”(Prof)) |X|codProf=codProf(
codMat,codProf(σmateria=”BD I”(Materia)))) |X|codMat=codMat(
noBoleta,codMat(AMateria))) |X|noBoleta=noBoleta(
noBoleta,nombre(Alumno))]