Compartir vía


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 Fabricen 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 LOOPde , HASHo 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 de INNER o LEFT, 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 de RIGHT, 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ón FULL, 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 DimProducty 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