ORDER BY
måste sortera resultatuppsättningen vilket kan ta lång tid om det är stort.
För att optimera det kan du behöva indexera tabellerna ordentligt.
Indexåtkomstvägen har dock sina nackdelar så det kan till och med ta längre tid.
Om du har något annat än equijoins i din fråga, eller de varierade predikaten (som <
, > eller
MELLAN
, eller GROUP BY
klausul), sedan indexet som används för ORDER BY
kan förhindra att de andra indexen används.
Om du lägger upp frågan kommer jag förmodligen att kunna berätta hur du optimerar den.
Uppdatering:
Skriv om frågan:
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
Relationen View_Product_Joined
, som namnet antyder, är förmodligen en vy.
Kan du snälla lägga upp dess definition?
Om det är indexerbart kan du dra nytta av att skapa ett index på View_Product_Joined (SiteName, Published, DocumentCulture, SKUEenabled, NodeOrder)
.