[英]USP AND CTE Performance Issue IN SQL-SERVER
請有人幫助我編寫更好的存儲過程。
下面的代碼需要3 小時才能運行 5000 萬條記錄。
下面的 USP 將進行一些計算,我試圖僅保留那些具有相同 SKU 最低 NEWPRICE 的記錄。
這是您的存儲過程中的查詢:
SELECT *
FROM table1 CMS INNER JOIN
table2 CRT
ON ID = ID CROSS APPLY
--------^
(SELECT NEWS = (SPW - ((SPW * 15)/100))) AS C
如果此查詢運行,則它正在執行cross join
。 為什么? 如果兩個表中都有一個id
列,那么您將收到一個錯誤(關於不明確的列引用)。
我建議您始終使用完全限定的列名——也就是說,對列來自的表使用表別名。
您可以更改程序以僅返回每個SKU
的最低NEWPRICE
CREATE PROCEDURE Usp_conditioncheck @mydate VARCHAR(50)
AS
SELECT * INTO mytable
FROM (SELECT *,
NEWPRICE =( spw - ( ( spw * 15 ) / 100 ) ),
rn = Row_number()OVER (partition BY sku ORDER BY ( spw - ( ( spw * 15 ) / 100 ) ) ASC)
FROM table1 CMS
INNER JOIN table2 CRT
ON id = id) A
WHERE rn = 1
現在可以只Select
每個SKU
NEWPRICE
最低的表
SELECT * FROM mytable
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.