Sugerencias de combinación (Transact-SQL)
Se aplica a:Sql Server
Azure SQL Database
Azure SQL Instancia administrada punto de conexión de SQL Analytics en Microsoft Fabric
Warehouse en la base de datos SQL de Microsoft Fabric
en Microsoft Fabric
Las sugerencias de combinación especifican que el optimizador de consultas aplique una estrategia de combinación entre dos tablas en SQL Server. Para obtener información general sobre las combinaciones y la sintaxis de combinación, vea CLÁUSULA FROM más JOIN, APPLY, PIVOT.
Precaución
Como el optimizador de consultas de SQL Server suele seleccionar el mejor plan de ejecución de una consulta, se recomienda que únicamente los administradores de bases de datos y desarrolladores experimentados utilicen las sugerencias como último recurso.
Se aplica a
Convenciones de sintaxis de Transact-SQL
Sintaxis
<join_hint> ::=
{ LOOP | HASH | MERGE | REMOTE | REDUCE | REPLICATE | REDISTRIBUTE [(columns count)]}
Argumentos
{ LOOP | HASH | MERGE }
se aplica a: Azure SQL Database, Azure SQL Managed Instance, punto de conexión de SQL Analytics, BASE de datos SQL en Microsoft Fabric, Microsoft Fabric Warehouse
Especifica que la combinación de la consulta utiliza bucles, hash o mezclas. El uso LOOP
de , HASH
o MERGE JOIN
aplica una combinación determinada entre dos tablas.
LOOP
no se puede especificar junto con RIGHT
ni FULL
como un tipo de combinación. Para más información, vea Combinaciones.
REMOTE
se aplica a: Azure SQL Database, Azure SQL Managed Instance, punto de conexión de SQL Analytics, BASE de datos SQL en Microsoft Fabric
Especifica que la operación de combinación se realice en el sitio de la tabla derecha. Esto es útil cuando la tabla izquierda es una tabla local y la tabla derecha es una tabla remota.
REMOTE
solo se debe usar cuando la tabla izquierda tiene menos filas que la tabla derecha.
Si la tabla derecha es local, la combinación se realiza localmente. Si ambas tablas son remotas pero de orígenes de datos diferentes, REMOTE
hace que la combinación se realice en el sitio de la tabla derecha. Si ambas tablas son tablas remotas del mismo origen de datos, REMOTE
no es necesario.
REMOTE
no se puede usar cuando uno de los valores que se comparan en el predicado de combinación se convierte en una intercalación diferente mediante la COLLATE
cláusula .
REMOTE
solo se puede usar para INNER JOIN
las operaciones.
REDUCE
se aplica a: Azure Synapse Analytics and Analytics Platform System (PDW)
Reduce el número de filas que se van a mover de la tabla del lado derecho de la combinación con el fin de que dos tablas no compatibles de distribución sean compatibles. La sugerencia REDUCE también se denomina sugerencia de semicombinación.
REPLICATE
se aplica a: Azure Synapse Analytics, Analytics Platform System (PDW), Microsoft Fabric Warehouse
Hace que una operación de movimiento de difusión, donde se replique una tabla específica en todos los nodos de distribución.
- Con
REPLICATE
con una combinación deINNER
oLEFT
, la operación de movimiento de difusión replicará el lado derecho de la unión a todos los nodos. - De forma similar, al usar
REPLICATE
con una combinación deRIGHT
, la operación de movimiento de difusión replicará el lado izquierdo de la unión a todos los nodos. - Al usar
REPLICATE
con una uniónFULL
, no se puede crear un plan estimado.
REDISTRIBUTE [(columns_count)]
se aplica a: Azure Synapse Analytics and Analytics Platform System (PDW)
Fuerza a la distribución de dos orígenes de datos en columnas especificadas en la cláusula JOIN. Para una tabla distribuida, Analytics Platform System (PDW) realiza un movimiento aleatorio en la primera columna de ambas tablas Para una tabla replicada, Analytics Platform System (PDW) realiza un movimiento de recorte. Para entender estos tipos de movimiento, vea la sección "DMS Query Plan Operations" (Operaciones del plan de consulta DMS) del artículo "Understanding Query Plans" (Descripción de los planes de consulta) de la documentación del producto de Analytics Platform System (PDW). Esta sugerencia puede mejorar el rendimiento si el plan de consulta usa un movimiento de difusión para resolver una combinación no compatible de distribución.
se aplica a: Microsoft Fabric Warehouse
La sugerencia REDISTRIBUTE
garantiza que dos orígenes de datos se distribuyan en función de las columnas de JOIN
cláusula. Controla varias condiciones de combinación, especificadas por las primeras columnas n de ambas tablas, donde n es el argumento column_count
. Redistribuir datos optimiza el rendimiento de las consultas mediante la distribución uniforme de datos entre nodos durante los pasos intermedios de ejecución.
El argumento (columns_count)
solo se admite en Microsoft Fabric Warehouse.
Comentarios
Las sugerencias de combinación se especifican en la FROM
cláusula de una consulta. Las sugerencias de combinación exigen una estrategia de combinación entre dos tablas. Si se especifica una sugerencia de combinación para dos tablas, el optimizador de consultas aplica automáticamente el orden de combinación para todas las tablas combinadas de la consulta, en función de la posición de las ON
palabras clave. Cuando se usa sin CROSS JOIN
la ON
cláusula , se pueden usar paréntesis para indicar el orden de combinación.
Ejemplos
Los ejemplos de código de este artículo usan la base de datos de ejemplo de AdventureWorks2022
o AdventureWorksDW2022
, que puede descargar de la página principal de Ejemplos de Microsoft SQL Server y proyectos de comunidad.
A Uso de HASH
En el siguiente ejemplo se especifica que la operación JOIN
de la consulta está realizada por una combinación HASH
.
SELECT p.Name,
pr.ProductReviewID
FROM Production.Product AS p
LEFT OUTER HASH JOIN Production.ProductReview AS pr
ON p.ProductID = pr.ProductID
ORDER BY ProductReviewID DESC;
B. Uso de LOOP
En el siguiente ejemplo se especifica que la operación JOIN
de la consulta está realizada por una combinación LOOP
.
DELETE
FROM Sales.SalesPersonQuotaHistory
FROM Sales.SalesPersonQuotaHistory AS spqh
INNER LOOP JOIN Sales.SalesPerson AS sp
ON spqh.SalesPersonID = sp.SalesPersonID
WHERE sp.SalesYTD > 2500000.00;
GO
C. Uso de MERGE
En el siguiente ejemplo se especifica que la operación JOIN
de la consulta está realizada por una combinación MERGE
.
SELECT poh.PurchaseOrderID,
poh.OrderDate,
pod.ProductID,
pod.DueDate,
poh.VendorID
FROM Purchasing.PurchaseOrderHeader AS poh
INNER MERGE JOIN Purchasing.PurchaseOrderDetail AS pod
ON poh.PurchaseOrderID = pod.PurchaseOrderID;
GO
D. Ejemplo de sugerencia de combinación REDUCE
En el ejemplo siguiente se usa la sugerencia de combinación REDUCE
para modificar el procesamiento de la tabla derivada dentro de la consulta. Cuando se usa la sugerencia de combinación REDUCE
en esta consulta, fis.ProductKey
se proyecta, se replica y se distingue, y luego se combina con DimProduct
durante la operación de orden aleatorio de DimProduct
en ProductKey
. La tabla derivada resultante se distribuye en fis.ProductKey
.
-- Uses AdventureWorks
SELECT SalesOrderNumber
FROM (
SELECT fis.SalesOrderNumber,
dp.ProductKey,
dp.EnglishProductName
FROM DimProduct AS dp
INNER REDUCE JOIN FactInternetSales AS fis
ON dp.ProductKey = fis.ProductKey
) AS dTable
ORDER BY SalesOrderNumber;
E. Ejemplo de sugerencia de combinación REPLICATE
En el ejemplo siguiente se muestra la misma consulta que en el ejemplo anterior, salvo que se usa una sugerencia de combinación REPLICATE
en lugar de la sugerencia de combinación REDUCE
. El empleo de la sugerencia REPLICATE
hace que los valores de la columna ProductKey
(de combinación) de la tabla FactInternetSales
se repliquen en todos los nodos. La tabla DimProduct
se combina con la versión replicada de esos valores.
-- Uses AdventureWorks
SELECT SalesOrderNumber
FROM (
SELECT fis.SalesOrderNumber,
dp.ProductKey,
dp.EnglishProductName
FROM DimProduct AS dp
INNER REPLICATE JOIN FactInternetSales AS fis
ON dp.ProductKey = fis.ProductKey
) AS dTable
ORDER BY SalesOrderNumber;
F. Use la sugerencia REDISTRIBUTE para garantizar un movimiento de orden aleatorio de una combinación no compatible de distribución
La consulta siguiente usa la sugerencia de consulta REDISTRIBUTE
en una combinación incompatible de distribución. Esto garantiza que el optimizador de consultas use un movimiento de orden aleatorio en el plan de consulta. También garantiza que el plan de consulta no use un movimiento de difusión que mueva una tabla distribuida a una tabla replicada.
En el ejemplo siguiente, la sugerencia REDISTRIBUTE
fuerza un movimiento aleatorio en la tabla FactInternetSales
porque ProductKey
es la columna de distribución de DimProduct
y no es la columna de distribución para FactInternetSales
.
-- Uses AdventureWorks
SELECT dp.ProductKey,
fis.SalesOrderNumber,
fis.TotalProductCost
FROM DimProduct AS dp
INNER REDISTRIBUTE JOIN FactInternetSales AS fis
ON dp.ProductKey = fis.ProductKey;
G. Uso del argumento count de columnas con la sugerencia REDISTRIBUTE
La consulta siguiente usa la sugerencia de consulta REDISTRIBUTE
con el argumento count de columnas y el orden aleatorio tiene lugar en las cuatro primeras columnas de cada tabla de la combinación.
SELECT * FROM DA
INNER REDISTRIBUTE (4) JOIN DB
ON DA.a1 = DB.b1