Sugerencias de combinación (Transact-SQL)
Las sugerencias de combinación especifican que el optimizador de consultas aplique una estrategia de combinación entre dos tablas.
Importante
|
|---|
|
Puesto que el optimizador de consultas de SQL Server normalmente selecciona el mejor plan de ejecución de una consulta, se recomienda que sólo los administradores de bases de datos y programadores experimentados utilicen las sugerencias, incluida <join_hint>, como último recurso. |
Se aplica a:
Las sugerencias de combinación se especifican en la cláusula FROM 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 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. Cuando se utiliza CROSS JOIN sin la cláusula ON, se pueden utilizar paréntesis para indicar el orden de combinación.
A. Utilizar HASH
En el siguiente ejemplo se especifica que la operación JOIN de la consulta está realizada por una combinación HASH.
USE AdventureWorks; GO SELECT p.Name, pr.ProductReviewID FROM Production.Product p LEFT OUTER HASH JOIN Production.ProductReview pr ON p.ProductID = pr.ProductID ORDER BY ProductReviewID DESC;
B. Utilizar LOOP
En el siguiente ejemplo se especifica que la operación JOIN de la consulta está realizada por una combinación LOOP.
USE AdventureWorks;
GO
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. Utilizar MERGE
En el siguiente ejemplo se especifica que la operación JOIN de la consulta está realizada por una combinación MERGE.
USE AdventureWorks;
GO
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

Importante