Optimizar Query SQL con UNION ALL

Pongamos un ejemplo de una query de SQL en que queremos traer las filas de TABLA1 y TABLA2. Usamos UNION para unir las dos consultas. Hasta aquí todo correcto. Pero se puede optimizar si sabemos lo que vamos a obtener.


Ejemplo:
SELECT NOMBRE, APELL FROM TABLA_EMPLEADOS
UNION
SELECT NOM, APE FROM TABLA_CLIENTES

Cuando se manda la sentencia al motor de la Base de Datos, realmente lo que hace es consultar TABLA1 con sus registros, consulta TABLA2 con sus registros, los junta, los ordena y les aplica un DISTINCT. Estas dos últimas tareas son las que ejercen más trabajo sobre el motor de Base de Datos, y las que más recursos gastan.

Si sabemos que los registros que vamos a obtener de TABLA1 y TABLA2 son completamente distintos, podemos usar UNION ALL, lo que evita que haga la ordenación y el DISTINCT en el motor de Base de Datos.

SELECT NOMBRE, APELL FROM TABLA_EMPLEADOS
UNION ALL
SELECT NOM, APE FROM TABLA_CLIENTES

Al hacer el UNION ALL, realmente lo que se pide es "traeme todos los registros, aunque esten duplicados". Pero si sabemos que no van a devolverse registros duplicados, usando esta variante obtendremos el mismo resultado, pero de forma más eficiente.

No hay comentarios:

Publicar un comentario

Mi foto
Geek y Friki de amplio espectro pero de baja intensidad. Bloguero, forero y jugón online. Y Papá. Cada vez con menos tiempo para los hobbies.
Experto en PowerBuilder.
¿Te ha gustado? Haz un +1 en Google!

También te puede interesar...