sql >> Databáze >  >> RDS >> Sqlserver

Špatný výkon SQL dotazu kvůli klauzuli ORDER BY

ORDER BY potřebuje třídit resultset, což může trvat dlouho, pokud je velké.

Chcete-li jej optimalizovat, možná budete muset správně indexovat tabulky.

Přístupová cesta k indexu má však své nevýhody, takže může trvat ještě déle.

Pokud máte v dotazu něco jiného než ekvijoiny nebo predikáty s rozsahem (jako < , > nebo BETWEEN , nebo GROUP BY klauzule), pak index použitý pro ORDER BY může zabránit použití ostatních indexů.

Pokud odešlete dotaz, pravděpodobně vám budu schopen říci, jak jej optimalizovat.

Aktualizace:

Přepište dotaz:

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

Vztah View_Product_Joined , jak název napovídá, je pravděpodobně pohled.

Mohl byste prosím zveřejnit jeho definici?

Pokud je indexovatelný, můžete mít prospěch z vytvoření indexu na View_Product_Joined (SiteName, Published, DocumentCulture, SKUEnabled, NodeOrder) .




  1. Přidání řádků do mysql z dynamických polí formuláře jquery

  2. MySQL:DATE_ADD

  3. Jak zkontrolovat velikost všech tabulek v databázi v MySQL

  4. Jquery k naplnění <table> na základě <select>