改进更新声明性能

时间:2018-05-16 23:40:36

标签: sql-server performance group-by sql-update

我正在构建SQL Update Query 此查询必须显示每个供应商的最高付费供应商和每月付款的详细信息,同时显示供应商的总付款

VendorTable
Vendor varchar(100)
Month   Date
MonthlyAmt   int
TotalAmt int

-

Vendor   Month   MonthlyAmt   TotalAmt
Vendor1  Jan-15  $100         NULL
Vendor2  Mar-16  $250         NULL
Vendor3  Sep-16  $300         NULL
Vendor1  Dec-16  $140         NULL
Vendor2  Feb-17  $210         NULL
Vendor1  Apr-17  $400         NULL
Vendor3  Aug-17  $420         NULL
Vendor2  Nov-17  $330         NULL
Vendor2  Mar-18  $110         NULL
Vendor1  May-18  $230         NULL

最终结果的示例

Vendor   Month   MonthlyAmt   TotalAmt
Vendor1  Jan-15  $100         $870
Vendor2  Mar-16  $250         $900
Vendor3  Sep-16  $300         $720
Vendor1  Dec-16  $140         $870
Vendor2  Feb-17  $210         $900
Vendor1  Apr-17  $400         $870
Vendor3  Aug-17  $420         $900
Vendor2  Nov-17  $330         $900
Vendor2  Mar-18  $110         $900
Vendor1  May-18  $230         $870

我的更新看起来像这样 但是处理需要很长时间 我想知道是否有更快的方法来做到这一点

UPDATE VendorTable 
SET TotalAmt = (SELECT SUM(MonthlyAmt) FROM VendorTable B WHERE B.Vendor = A.Vendor)
from VendorTable A

1 个答案:

答案 0 :(得分:3)

尝试类似......

TotalAmt

您的查询速度很慢,因为外部更新查询返回的每一行都会执行内部选择。

同时检查表中是否有任何索引,其中包含{{1}}列,这些索引也会降低您的更新速度。