Published on

August 24, 2000

Comprendiendo las uniones de combinación en SQL Server

En SQL Server, existen tres tipos de operaciones de unión: uniones de bucle anidado, uniones de combinación y uniones de hash. En este artículo, nos centraremos en las uniones de combinación y discutiremos cuándo SQL Server elige este tipo de operación de unión.

La unión de combinación se considera uno de los métodos más efectivos para unir tablas. Se utiliza cuando ambas entradas están ordenadas en las columnas de combinación. El mejor escenario para una unión de combinación es cuando ambas tablas tienen un índice agrupado en la columna que las une. Esto permite a SQL Server escanear solo n1 + n2 filas para devolver el conjunto de resultados, donde n1 es el número de filas en la Tabla1 y n2 es el número de filas en la Tabla2.

Consideremos un ejemplo. Supongamos que tenemos dos tablas, Tabla1 y Tabla2, y no hay un índice en la columna que une estas tablas. En el peor de los casos, con una unión de bucle anidado, SQL Server escaneará n1 * n2 filas para devolver el conjunto de resultados. Esto significa que para cada fila de la tabla externa, se escaneará completamente la tabla interna. Sin embargo, en el mejor de los casos, si ambas tablas tienen un índice agrupado en la columna de unión y hay una relación de uno a muchos entre Tabla1 y Tabla2, se utilizará una unión de combinación y SQL Server solo necesitará escanear n1 + n2 filas para devolver el conjunto de resultados.

Aquí hay un ejemplo de código para demostrar el uso de una unión de combinación:

CREATE TABLE Tabla1 (
    Tabla1_id int primary key CLUSTERED,
    nombre char(10)
)

CREATE TABLE Tabla2 (
    Tabla2_id int primary key NONCLUSTERED,
    Tabla1_id int,
    nombre char(10)
)

CREATE CLUSTERED INDEX indTabla2 ON Tabla2 (Tabla1_id)

DECLARE @i int
SELECT @i = 1
WHILE @i < 1000
BEGIN
    INSERT INTO Tabla1 VALUES (@i, LTRIM(str(@i)))
    SELECT @i = @i + 1
END

DECLARE @i int
SELECT @i = 1
WHILE @i < 1000
BEGIN
    INSERT INTO Tabla2 VALUES (@i, @i, LTRIM(str(@i)))
    SELECT @i = @i + 1
END

SET SHOWPLAN_TEXT ON

SELECT a.Tabla1_id, b.Tabla1_id 
FROM Tabla1 a 
INNER JOIN Tabla2 b ON a.Tabla1_id = b.Tabla1_id

SET SHOWPLAN_TEXT OFF

El código anterior mostrará el plan de ejecución, que mostrará que se está utilizando una unión de combinación.

Es importante tener en cuenta que si las tablas unidas son pequeñas (contienen solo una página de datos, por ejemplo) y al menos una de las tablas unidas tiene un índice en la columna de unión, SQL Server utilizará una unión de bucle anidado en lugar de una unión de combinación o una unión de hash. El optimizador de consultas generalmente selecciona el mejor plan de ejecución para una determinada instrucción SELECT, por lo que no es necesario cambiar el tipo de unión. Sin embargo, en algunos casos, puede ser útil forzar un tipo de unión específico utilizando la cláusula OPTION.

Aquí hay un ejemplo para forzar una unión de combinación:

USE pubs

SET SHOWPLAN_TEXT ON

SELECT a.au_id 
FROM authors a 
JOIN titleauthor b ON a.au_id = b.au_id 
OPTION (MERGE JOIN)

SET SHOWPLAN_TEXT OFF

El código anterior mostrará el plan de ejecución, que mostrará que se está utilizando una unión de combinación.

Comprender las diferentes operaciones de unión en SQL Server, como las uniones de combinación, puede ayudar a optimizar el rendimiento de las consultas y mejorar la eficiencia general de la base de datos. Al aprovechar el tipo de unión adecuado y garantizar una indexación adecuada, puede mejorar significativamente la velocidad y eficiencia de sus consultas de SQL Server.

Gracias por leer este artículo. ¡Estén atentos para más consejos y trucos de SQL Server!

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.