El ORDER BY
necesita ordenar el conjunto de resultados, lo que puede llevar mucho tiempo si es grande.
Para optimizarlo, es posible que deba indexar las tablas correctamente.
Sin embargo, la ruta de acceso al índice tiene sus inconvenientes, por lo que incluso puede llevar más tiempo.
Si tiene algo más que equijoins en su consulta, o los predicados de rango (como <
, >
o BETWEEN
, o GROUP BY
cláusula), luego el índice usado para ORDER BY
puede impedir que se utilicen los otros índices.
Si publica la consulta, probablemente pueda decirle cómo optimizarla.
Actualización:
Vuelva a escribir la consulta:
SELECT *
FROM View_Product_Joined j
LEFT JOIN
[dbo].[OPR_InventoryRules] irp
ON irp.ID = j.skuid
AND irp.InventoryRulesType = 'Product'
LEFT JOIN
[dbo].[OPR_InventoryRules] irs
ON irs.ID = j.NodeSiteID
AND irs.InventoryRulesType = 'Store'
CROSS APPLY
(
SELECT TOP 1 *
FROM OPR_PriceLookup pl
WHERE pl.siteID = j.NodeSiteID
AND pl.skuid = j.skuid
AND pl.RoleID IN (-1, 13)
ORDER BY
pl.RoleID desc
) pl
WHERE SiteName = N'EcommerceSite'
AND Published = 1
AND DocumentCulture = N'en-GB'
AND NodeAliasPath LIKE N'/Products/Cats/Computers/Computer-servers/%'
AND NodeSKUID IS NOT NULL
AND SKUEnabled = 1
ORDER BY
NodeOrder ASC
La relación View_Product_Joined
, como sugiere el nombre, es probablemente una vista.
¿Podría publicar su definición?
Si es indexable, puede beneficiarse de la creación de un índice en View_Product_Joined (SiteName, Published, DocumentCulture, SKUEnabled, NodeOrder)
.