Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Mau desempenho da consulta SQL devido à cláusula ORDER BY


O ORDER BY precisa classificar o conjunto de resultados que pode demorar muito se for grande.

Para otimizá-lo, pode ser necessário indexar as tabelas corretamente.

O caminho de acesso ao índice, no entanto, tem suas desvantagens, de modo que pode demorar mais.

Se você tiver algo diferente de equijoins em sua consulta ou os predicados de intervalo (como < , > ou BETWEEN , ou GROUP BY cláusula), então o índice usado para ORDER BY pode impedir que os outros índices sejam usados.

Se você postar a consulta, provavelmente poderei dizer como otimizá-la.

Atualização:

Reescreva a 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

A relação View_Product_Joined , como o nome sugere, é provavelmente uma visão.

Poderia postar a definição dele?

Se for indexável, você pode se beneficiar da criação de um índice em View_Product_Joined (SiteName, Published, DocumentCulture, SKUEnabled, NodeOrder) .