Microsoft SQL Server
Consejos de consulta
Buscar..
ÚNETE a sugerencias
Cuando se unen dos tablas, el optimizador de consultas (QO) de SQL Server puede elegir diferentes tipos de combinaciones que se usarán en la consulta:
- HASH unirse
- Loop unirse
- MERGE unirse
QO explorará los planes y elegirá al operador óptimo para unir tablas. Sin embargo, si está seguro de saber cuál sería el operador de combinación óptimo, puede especificar qué tipo de combinación debe usarse. La combinación interna de LOOP obligará a QO a elegir la combinación de bucle anidado al unir dos tablas:
select top 100 *
from Sales.Orders o
inner loop join Sales.OrderLines ol
on o.OrderID = ol.OrderID
la unión interna de combinación forzará el operador de combinación de MERGE:
select top 100 *
from Sales.Orders o
inner merge join Sales.OrderLines ol
on o.OrderID = ol.OrderID
La combinación de hash interno forzará al operador de unión HASH:
select top 100 *
from Sales.Orders o
inner hash join Sales.OrderLines ol
on o.OrderID = ol.OrderID
GRUPO POR CONSEJOS
Cuando utiliza la cláusula GROUP BY, el optimizador de consultas de SQL Server (QO) puede elegir diferentes tipos de operadores de agrupación:
- Agregado de HASH que crea un hash-map para agrupar entradas
- Agregado de flujo que funciona bien con entradas pre-ordenadas
Puede requerir explícitamente que QO elija uno u otro operador agregado si sabe cuál sería el óptimo. Con OPTION (ORDER GROUP), QO siempre elegirá Stream agregate y agregará el operador Sort al frente de Stream agregate si la entrada no está ordenada:
select OrderID, AVG(Quantity)
from Sales.OrderLines
group by OrderID
OPTION (ORDER GROUP)
Con OPTION (HASH GROUP), QO siempre elegirá el agregado de hash:
select OrderID, AVG(Quantity)
from Sales.OrderLines
group by OrderID
OPTION (HASH GROUP)
Sugerencia de filas FAST
Especifica que la consulta está optimizada para la recuperación rápida de las primeras number_rows. Este es un entero no negativo. Después de que se devuelven los primeros number_rows, la consulta continúa la ejecución y produce su conjunto de resultados completo.
select OrderID, AVG(Quantity)
from Sales.OrderLines
group by OrderID
OPTION (FAST 20)
Consejos UNION
Cuando utiliza el operador UNION en dos resultados de consulta, el Optimizador de consultas (QO) puede usar los siguientes operadores para crear una unión de dos conjuntos de resultados:
- Fusionar (Unión)
- Concat (Unión)
- Hash Match (Unión)
Puede especificar explícitamente qué operador se debe usar usando la sugerencia OPTION ():
select OrderID, OrderDate, ExpectedDeliveryDate, Comments
from Sales.Orders
where OrderDate > DATEADD(day, -1, getdate())
UNION
select PurchaseOrderID as OrderID, OrderDate, ExpectedDeliveryDate, Comments
from Purchasing.PurchaseOrders
where OrderDate > DATEADD(day, -1, getdate())
OPTION(HASH UNION)
-- or OPTION(CONCAT UNION)
-- or OPTION(MERGE UNION)
Opción MAXDOP
Especifica el grado máximo de paralelismo para la consulta que especifica esta opción.
SELECT OrderID,
AVG(Quantity)
FROM Sales.OrderLines
GROUP BY OrderID
OPTION (MAXDOP 2);
Esta opción anula la opción de configuración MAXDOP de sp_configure y Resource Governor. Si MAXDOP se establece en cero, el servidor elige el grado máximo de paralelismo.
INDEX Consejos
Las sugerencias de índice se usan para forzar a una consulta a usar un índice específico, en lugar de permitir que el Optimizador de consultas de SQL Server elija el que considere el mejor índice. En algunos casos, puede obtener beneficios al especificar el índice que debe usar una consulta. Por lo general, el Optimizador de consultas de SQL Server elige el mejor índice adecuado para la consulta, pero debido a estadísticas faltantes / obsoletas o necesidades específicas, puede forzarlo.
SELECT *
FROM mytable WITH (INDEX (ix_date))
WHERE field1 > 0
AND CreationDate > '20170101'