sql >> Database teknologi >  >> RDS >> Sqlserver

Dårlig ydeevne af SQL-forespørgsel på grund af ORDER BY-klausul

ORDER BY skal sortere resultatsættet, hvilket kan tage lang tid, hvis det er stort.

For at optimere det, skal du muligvis indeksere tabellerne korrekt.

Indeksadgangsstien har dog sine ulemper, så det kan endda tage længere tid.

Hvis du har noget andet end equijoins i din forespørgsel eller de intervalerede prædikater (såsom < , > eller MELLEM , eller GRUPPER EFTER klausul), derefter indekset brugt til ORDER BY kan forhindre de andre indekser i at blive brugt.

Hvis du sender forespørgslen, vil jeg sandsynligvis kunne fortælle dig, hvordan du optimerer den.

Opdatering:

Omskriv forespørgslen:

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

Relationen View_Product_Joined , som navnet antyder, er nok en udsigt.

Kan du venligst skrive dens definition?

Hvis det kan indekseres, kan du med fordel oprette et indeks på View_Product_Joined (SiteName, Published, DocumentCulture, SKUEnabled, NodeOrder) .




  1. Tilslutning af en ny Rails-app til en eksisterende MySQL-database

  2. PHP PDO Tilføj filter til alle forespørgsler

  3. xquery value()-metoden virker ikke og giver fejl

  4. Hjælp til fejlfinding SqlException:Timeout udløb ved forbindelse, i en situation uden belastning