簡體   English   中英

SQL-SERVER 中的 USP 和 CTE 性能問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM