Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Mauvaise performance de la requête SQL en raison de la clause ORDER BY

Le ORDER BY doit trier le jeu de résultats, ce qui peut prendre du temps s'il est volumineux.

Pour l'optimiser, vous devrez peut-être indexer les tables correctement.

Le chemin d'accès à l'index, cependant, a ses inconvénients et peut même prendre plus de temps.

Si vous avez autre chose que des équijointures dans votre requête, ou les prédicats étendus (comme < , > ou BETWEEN , ou GROUP BY clause), puis l'index utilisé pour ORDER BY peut empêcher l'utilisation des autres index.

Si vous publiez la requête, je pourrai probablement vous dire comment l'optimiser.

Mise à jour :

Réécrivez la requête :

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 relation View_Product_Joined , comme son nom l'indique, est probablement une vue.

Pourriez-vous s'il vous plaît poster sa définition ?

S'il est indexable, vous pouvez bénéficier de la création d'un index sur View_Product_Joined (SiteName, Published, DocumentCulture, SKUEnabled, NodeOrder) .