Ich habe eine Abfrage, die 4 Tabellen mit einer Vielzahl von Bedingungen in der WHERE-Klausel verbindet. Die Abfrage enthält auch eine ORDER BY-Klausel für eine numerische Spalte. Die Rückgabe dauert 6 Sekunden, was zu lang ist und ich muss sie beschleunigen. Überraschenderweise habe ich festgestellt, dass die Abfrage nur 2 Sekunden dauert, wenn ich die ORDER BY-Klausel entferne. Warum macht die ORDER BY-Klausel einen so großen Unterschied und wie kann ich sie optimieren? Ich verwende SQL Server 2005. Vielen Dank!
Ich kann nicht bestätigen, dass das ORDER BY einen großen Unterschied macht, da ich den Ausführungsplan-Cache lösche. Können Sie mir jedoch sagen, wie ich das Ganze ein wenig beschleunigen kann? Die Abfrage ist wie folgt (der Einfachheit halber gibt es "SELECT *", aber ich wähle nur die, die ich brauche).
SELECT *
FROM View_Product_Joined j
INNER JOIN [dbo].[OPR_PriceLookup] pl on pl.siteID = NodeSiteID and pl.skuid = j.skuid
LEFT JOIN [dbo].[OPR_InventoryRules] irp on irp.ID = pl.SkuID and irp.InventoryRulesType = 'Product'
LEFT JOIN [dbo].[OPR_InventoryRules] irs on irs.ID = pl.siteID and irs.InventoryRulesType = 'Store'
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) AND pl.PriceLookupID in (select TOP 1 PriceLookupID from OPR_PriceLookup pl2 where pl.skuid = pl2.skuid and (pl2.RoleID = -1 or pl2.RoleId = 13) order by pl2.RoleID desc)))
ORDER BY NodeOrder ASC