sql >> Databasteknik >  >> RDS >> Sqlserver

Dålig prestanda för SQL-frågan på grund av ORDER BY-satsen

ORDER BY måste sortera resultatuppsättningen vilket kan ta lång tid om det är stort.

För att optimera det kan du behöva indexera tabellerna ordentligt.

Indexåtkomstvägen har dock sina nackdelar så det kan till och med ta längre tid.

Om du har något annat än equijoins i din fråga, eller de varierade predikaten (som < , > eller MELLAN , eller GROUP BY klausul), sedan indexet som används för ORDER BY kan förhindra att de andra indexen används.

Om du lägger upp frågan kommer jag förmodligen att kunna berätta hur du optimerar den.

Uppdatering:

Skriv om frågan:

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 namnet antyder, är förmodligen en vy.

Kan du snälla lägga upp dess definition?

Om det är indexerbart kan du dra nytta av att skapa ett index på View_Product_Joined (SiteName, Published, DocumentCulture, SKUEenabled, NodeOrder) .




  1. Hur laddar man upp Excel eller CSV till MySQL-databas med PHP?

  2. Ett fel uppstod under installationen av pg (0.18.2), och Bundler kan inte fortsätta

  3. Garanterar SQL Server sekventiell infogning av en identitetskolumn?

  4. 4 sätt att hitta rader som innehåller versaler i PostgreSQL