O
ORDER BY
precisa classificar o conjunto de resultados que pode demorar muito se for grande. Para otimizá-lo, pode ser necessário indexar as tabelas corretamente.
O caminho de acesso ao índice, no entanto, tem suas desvantagens, de modo que pode demorar mais.
Se você tiver algo diferente de equijoins em sua consulta ou os predicados de intervalo (como
<
, >
ou BETWEEN
, ou GROUP BY
cláusula), então o índice usado para ORDER BY
pode impedir que os outros índices sejam usados. Se você postar a consulta, provavelmente poderei dizer como otimizá-la.
Atualização:
Reescreva a 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
A relação
View_Product_Joined
, como o nome sugere, é provavelmente uma visão. Poderia postar a definição dele?
Se for indexável, você pode se beneficiar da criação de um índice em
View_Product_Joined (SiteName, Published, DocumentCulture, SKUEnabled, NodeOrder)
.