Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Лоша производителност на SQL заявка поради клауза ORDER BY

ПОРЪЧАЙ ПО трябва да сортира набора от резултати, което може да отнеме много време, ако е голям.

За да го оптимизирате, може да се наложи да индексирате правилно таблиците.

Пътят за достъп до индекса обаче има своите недостатъци, така че дори може да отнеме повече време.

Ако имате нещо различно от equijoins във вашата заявка или диапазонирани предикати (като < , > или МЕЖДУ или ГРУПИРАНЕ ПО клауза), след това индексът, използван за ORDER BY може да попречи на другите индекси да бъдат използвани.

Ако публикувате запитването, вероятно ще мога да ви кажа как да го оптимизирате.

Актуализация:

Пренапишете заявката:

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

Връзката View_Product_Joined , както подсказва името, вероятно е изглед.

Можете ли да публикувате определението му?

Ако може да се индексира, можете да се възползвате от създаването на индекс на View_Product_Joined (SiteName, Published, DocumentCulture, SKUEnabled, NodeOrder) .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да генерирате всички скриптове за ограничения

  2. Как да създам таблица на базата на друга таблица

  3. BUK INSERT в определени колони?

  4. уникален ключ, базиран на 2 колони в SQl Server 2008?

  5. Обхват на временните таблици в SQL Server