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)
.