Ho una query che unisce 4 tabelle con molte condizioni nella clausola WHERE. La query include anche la clausola ORDER BY su una colonna numerica. Ci vogliono 6 secondi per tornare, che è troppo lungo e ho bisogno di accelerarlo. Sorprendentemente ho scoperto che se rimuovo la clausola ORDER BY ci vogliono 2 secondi. Perché l'ordine fa una differenza così grande e come ottimizzarlo? Sto usando SQL Server 2005. Molte grazie.Scarsa prestazione della query SQL a causa della clausola ORDER BY
Non riesco a confermare che l'ordine BY fa una grande differenza dal momento che sto svuotando la cache del piano di esecuzione. Tuttavia, puoi far luce su come accelerare un po 'questo? La query è la seguente (per semplicità c'è "SELECT *" ma sto selezionando solo quelli di cui ho bisogno).
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
Hai esaminato il piano di query? –
prova ad indicizzare la colonna che stai usando nella tua clausola ORDER BY (se non lo hai già fatto) – davek
Assicurati anche di cancellare la cache del piano dati/esecuzione tra ogni test, altrimenti potresti ottenere risultati distorti (peggiore caso in cui essi sono effettivamente eseguire lo stesso, ma il 2 ° corre più veloce in quanto sta ricevendo i dati dalla cache). – AdaTheDev