Der ORDER BY
muss die Ergebnismenge sortieren, was lange dauern kann, wenn sie groß ist.
Um es zu optimieren, müssen Sie die Tabellen möglicherweise richtig indizieren.
Der Index-Zugriffspfad hat jedoch seine Nachteile, sodass er sogar länger dauern kann.
Wenn Ihre Abfrage etwas anderes als Equijoins oder die Bereichsprädikate (wie <
, >
oder BETWEEN
, oder GROUP BY
-Klausel), dann der für ORDER BY
verwendete Index kann verhindern, dass die anderen Indizes verwendet werden.
Wenn Sie die Abfrage posten, kann ich Ihnen wahrscheinlich sagen, wie Sie sie optimieren können.
Aktualisierung:
Schreiben Sie die Abfrage neu:
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
Die Relation View_Product_Joined
, wie der Name schon sagt, ist wahrscheinlich eine Ansicht.
Könntest du bitte seine Definition posten?
Wenn es indexierbar ist, können Sie davon profitieren, einen Index für View_Product_Joined (SiteName, Published, DocumentCulture, SKUEnabled, NodeOrder)
zu erstellen .