ORDER BY
skal sortere resultatsættet, hvilket kan tage lang tid, hvis det er stort.
For at optimere det, skal du muligvis indeksere tabellerne korrekt.
Indeksadgangsstien har dog sine ulemper, så det kan endda tage længere tid.
Hvis du har noget andet end equijoins i din forespørgsel eller de intervalerede prædikater (såsom <
, > eller
MELLEM
, eller GRUPPER EFTER
klausul), derefter indekset brugt til ORDER BY
kan forhindre de andre indekser i at blive brugt.
Hvis du sender forespørgslen, vil jeg sandsynligvis kunne fortælle dig, hvordan du optimerer den.
Opdatering:
Omskriv forespørgslen:
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 navnet antyder, er nok en udsigt.
Kan du venligst skrive dens definition?
Hvis det kan indekseres, kan du med fordel oprette et indeks på View_Product_Joined (SiteName, Published, DocumentCulture, SKUEnabled, NodeOrder)
.