Почему заказ так важен и как его оптимизировать?
ORDER BY
необходимо отсортировать набор результатов, который может занять много времени, если он большой.
Чтобы оптимизировать его, вам может потребоваться правильно проиндексировать таблицы.
Однако путь доступа к индексу имеет свои недостатки, поэтому он может занять больше времени.
Если в вашем запросе есть что-то отличное от эквиджоин или ранжированных предикатов (например, <
, >
или BETWEEN
или GROUP BY
), тогда индекс, используемый для 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)
.