sql >> Base de Datos >  >> RDS >> Sqlserver

Mal rendimiento de la consulta SQL debido a la cláusula ORDER BY

El ORDER BY necesita ordenar el conjunto de resultados, lo que puede llevar mucho tiempo si es grande.

Para optimizarlo, es posible que deba indexar las tablas correctamente.

Sin embargo, la ruta de acceso al índice tiene sus inconvenientes, por lo que incluso puede llevar más tiempo.

Si tiene algo más que equijoins en su consulta, o los predicados de rango (como < , > o BETWEEN , o GROUP BY cláusula), luego el índice usado para ORDER BY puede impedir que se utilicen los otros índices.

Si publica la consulta, probablemente pueda decirle cómo optimizarla.

Actualización:

Vuelva a escribir la consulta:

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

La relación View_Product_Joined , como sugiere el nombre, es probablemente una vista.

¿Podría publicar su definición?

Si es indexable, puede beneficiarse de la creación de un índice en View_Product_Joined (SiteName, Published, DocumentCulture, SKUEnabled, NodeOrder) .