Sugerencias (Transact-SQL): combinaciónHints (Transact-SQL) - Join

SE APLICA A: síSQL Server síAzure SQL Database noAzure Synapse Analytics (SQL DW) noAlmacenamiento de datos paralelosAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Las sugerencias de combinación especifican que el optimizador de consultas aplique una estrategia de combinación entre dos tablas en SQL Server 2019 (15.x)SQL Server 2019 (15.x).Join hints specify that the query optimizer enforce a join strategy between two tables in SQL Server 2019 (15.x)SQL Server 2019 (15.x). Para obtener información general sobre las combinaciones y la sintaxis de combinación, vea FROM (Transact-SQL).For general information about joins and join syntax, see FROM (Transact-SQL).

Precaución

Como el optimizador de consultas de SQL ServerSQL 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.Because the SQL ServerSQL Server query optimizer typically selects the best execution plan for a query, we recommend that hints be used only as a last resort by experienced developers and database administrators.

Se aplica a:Applies to:

DELETEDELETE

SELECTSELECT

UPDATEUPDATE

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

  
<join_hint> ::=   
     { LOOP | HASH | MERGE | REMOTE }  

ArgumentosArguments

LOOP | HASH | MERGELOOP | HASH | MERGE
Especifica que la combinación de la consulta utiliza bucles, hash o mezclas.Specifies that the join in the query should use looping, hashing, or merging. El uso de LOOP | HASH | MERGE JOIN aplica una combinación particular entre dos tablas.Using LOOP |HASH | MERGE JOIN enforces a particular join between two tables. LOOP no se puede especificar junto con RIGHT o FULL como un tipo de combinación.LOOP cannot be specified together with RIGHT or FULL as a join type.

REMOTEREMOTE
Especifica que la operación de combinación se realice en el sitio de la tabla derecha.Specifies that the join operation is performed on the site of the right table. Esto es útil cuando la tabla izquierda es una tabla local y la tabla derecha es una tabla remota.This is useful when the left table is a local table and the right table is a remote table. REMOTE solo se debe utilizar cuando la tabla izquierda tenga menos filas que la tabla derecha.REMOTE should be used only when the left table has fewer rows than the right table.

Si la tabla derecha es local, la combinación se realiza localmente.If the right table is local, the join is performed locally. 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.If both tables are remote but from different data sources, REMOTE causes the join to be performed on the site of the right table. Si ambas tablas son tablas remotas pero del mismo origen de datos, REMOTE no es necesario.If both tables are remote tables from the same data source, REMOTE is not required.

REMOTE no se puede utilizar cuando uno de los valores que se va a comparar en el predicado de combinación se convierte a una intercalación distinta mediante la cláusula COLLATE.REMOTE cannot be used when one of the values being compared in the join predicate is cast to a different collation using the COLLATE clause.

REMOTE solo puede utilizarse en operaciones INNER JOIN.REMOTE can be used only for INNER JOIN operations.

ObservacionesRemarks

Las sugerencias de combinación se especifican en la cláusula FROM de una consulta.Join hints are specified in the FROM clause of a query. Las sugerencias de combinación exigen una estrategia de combinación entre dos tablas.Join hints enforce a join strategy between two tables. Si se especifica una sugerencia de combinación entre dos tablas, el optimizador de consultas aplica automáticamente el orden de combinación de todas las tablas combinadas de la consulta, basándose en la posición de las palabras clave ON.If a join hint is specified for any two tables, the query optimizer automatically enforces the join order for all joined tables in the query, based on the position of the ON keywords. Cuando se utiliza CROSS JOIN sin la cláusula ON, se pueden utilizar paréntesis para indicar el orden de combinación.When a CROSS JOIN is used without the ON clause, parentheses can be used to indicate the join order.

EjemplosExamples

A.A. Usar HASHUsing HASH

En el siguiente ejemplo se especifica que la operación JOIN de la consulta está realizada por una combinación HASH.The following example specifies that the JOIN operation in the query is performed by a HASH join. En el ejemplo se usa la base de datos AdventureWorks2012AdventureWorks2012.The example uses the AdventureWorks2012AdventureWorks2012 database.

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.B. Usar LOOPUsing LOOP

En el siguiente ejemplo se especifica que la operación JOIN de la consulta está realizada por una combinación LOOP.The following example specifies that the JOIN operation in the query is performed by a LOOP join. En el ejemplo se usa la base de datos AdventureWorks2012AdventureWorks2012.The example uses the AdventureWorks2012AdventureWorks2012 database.

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.C. Usar MERGEUsing MERGE

En el siguiente ejemplo se especifica que la operación JOIN de la consulta está realizada por una combinación MERGE.The following example specifies that the JOIN operation in the query is performed by a MERGE join. En el ejemplo se usa la base de datos AdventureWorks2012AdventureWorks2012.The example uses the AdventureWorks2012AdventureWorks2012 database.

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  

Consulte tambiénSee Also

Sugerencias (Transact-SQL)Hints (Transact-SQL)