ZAMÓW PRZEZ
musi posortować zestaw wyników, co może zająć dużo czasu, jeśli jest duży.
Aby go zoptymalizować, może być konieczne prawidłowe indeksowanie tabel.
Ścieżka dostępu do indeksu ma jednak swoje wady, więc może potrwać dłużej.
Jeśli w zapytaniu występuje coś innego niż equijoins lub predykaty z zakresu (np. <
, > lub
POMIĘDZY
lub GRUPA WG
klauzuli), a następnie indeks używany dla ORDER BY
może uniemożliwić korzystanie z innych indeksów.
Jeśli opublikujesz zapytanie, prawdopodobnie będę w stanie powiedzieć Ci, jak je zoptymalizować.
Aktualizacja:
Przepisz zapytanie:
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
Relacja View_Product_Joined
, jak sama nazwa wskazuje, to prawdopodobnie widok.
Czy możesz opublikować jego definicję?
Jeśli jest indeksowalny, możesz skorzystać z utworzenia indeksu na View_Product_Joined (SiteName, Published, DocumentCulture, SKUenabled, NodeOrder)
.