很多人在做数据的批量更新时..如果更新的内容是从其他表查出来的..很容易这么写..
UPDATE TABLE1 SET COLUMN1=(SELECT SUM(SOMETHING) FROM TABLE2 WHERE COLUMN2=TABLE1.COLUMN2)
这样的结构对于一般的小数据更新当然是没问题的..因为体现不出劣势..
但是到了数据量大了的时候..特别在后边的查询时..量大并且结构复杂的时候..
那一定会自食恶果..你就等吧..一条T-SQL执行个把小时..甚至计算速度后..发现要执行一天多的时候..就光剩下瞪眼了..
在这里严重推荐一下这种写法..
UPDATE TABLE_1 SET COL_1=TT2.RESULT_COL_1,COL_2=TT2.RESULT_COL_2 FROM TABLE1 AS TT1 INNER JOIN (SELECT RESULT_COL_1,RESULT_COL_2 FROM TABLE_2) AS TT2 ON TT2.RELATION_COL=TT1.RELATION_COL
上边的结构在查询上只进行一次..更新进行的是最小次数..就是查询出结果的行数..
这个结构在一个同事那里..把他原来要进行27个小时的运算..缩短到了2分半钟..威力可见一斑..