可能有人請幫我寫出更好的存儲過程。USP和CTE SQL-SERVER中的性能問題
下面的代碼需要3小時運行5000萬條記錄。
下面的USP會做一些計算,我試圖只保留那些具有最低NEWPRICE的相同SKU的記錄。
可能有人請幫我寫出更好的存儲過程。USP和CTE SQL-SERVER中的性能問題
下面的代碼需要3小時運行5000萬條記錄。
下面的USP會做一些計算,我試圖只保留那些具有最低NEWPRICE的相同SKU的記錄。
你可以改變只返回最低NEWPRICE
每個SKU
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
SELECT * FROM mytable
這有最低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
列,那麼你會得到一個錯誤(有關模糊列引用的東西)。
我會建議你總是使用完全限定的列名 - 也就是說,使用列別名的表的別名。
我編輯了我的問題,查詢表現非常糟糕。請分享您的建議。 –
任何人都可以請幫助我。 –