[英]Bad performance of SQL query due to ORDER BY clause
我有一個查詢連接4個表,WHERE子句中有很多條件。 該查詢還包括數字列上的ORDER BY子句。 返回需要6秒,這太長了,我需要加快速度。 令人驚訝的是,我發現如果我刪除ORDER BY子句需要2秒鍾。 為什么訂單會產生如此巨大的差異以及如何優化它? 我正在使用SQL Server 2005.非常感謝。
由於我正在清除執行計划緩存,因此我無法確認ORDER BY有很大的不同。 但是,你能說明如何加快這一點嗎? 查詢如下(為簡單起見,有“SELECT *”,但我只選擇我需要的那些)。
SELECT *
FROM View_Product_Joined j
INNER JOIN [dbo].[OPR_PriceLookup] pl on pl.siteID = NodeSiteID and pl.skuid = j.skuid
LEFT JOIN [dbo].[OPR_InventoryRules] irp on irp.ID = pl.SkuID and irp.InventoryRulesType = 'Product'
LEFT JOIN [dbo].[OPR_InventoryRules] irs on irs.ID = pl.siteID and irs.InventoryRulesType = 'Store'
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) AND pl.PriceLookupID in (select TOP 1 PriceLookupID from OPR_PriceLookup pl2 where pl.skuid = pl2.skuid and (pl2.RoleID = -1 or pl2.RoleId = 13) order by pl2.RoleID desc)))
ORDER BY NodeOrder ASC
為什么訂單會產生如此巨大的差異以及如何優化它?
ORDER BY
需要對結果集進行排序,如果結果集很大則可能需要很長時間。
要優化它,您可能需要正確索引表。
但是,索引訪問路徑有其缺點,因此甚至可能需要更長時間。
如果在查詢中有除equijoins之外的其他內容,或者有遠程謂詞(如<
, >
或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)
上創建索引中受益。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.