Tengo una consulta que une 4 tablas con muchas condiciones en la cláusula WHERE. La consulta también incluye la cláusula ORDER BY en una columna numérica. Se tarda 6 segundos en volver, que es demasiado largo y necesito acelerarlo. Sorprendentemente, encontré que si eliminé la cláusula ORDER BY tardo 2 segundos. ¿Por qué el orden hace una diferencia tan enorme y cómo optimizarlo? Estoy usando SQL Server 2005. Muchas gracias.Mal rendimiento de la consulta SQL debido a la cláusula ORDER BY
No puedo confirmar que el ORDER BY haga una gran diferencia ya que estoy borrando el caché del plan de ejecución. Sin embargo, ¿puedes arrojar luz sobre cómo acelerar esto un poco? La consulta es la siguiente (por simplicidad, hay "SELECCIONAR *", pero solo estoy seleccionando los que necesito).
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
¿Has mirado el plan de consulta? –
intente indexar la columna que está utilizando en su cláusula ORDER BY (si no lo ha hecho aún, es decir) – davek
También asegúrese de borrar la caché del plan de datos/ejecución entre cada prueba, de lo contrario podría obtener resultados sesgados (peor En el caso hipotético, en realidad sí tienen el mismo rendimiento, pero el segundo funciona más rápido ya que está obteniendo datos del caché). – AdaTheDev