子查询求和并更新update
update TableA set usd = (select sum(usd) from TableA_m
where TableA.id = TableA.id)
where TableA.id=@id
谁能解释下,这个写法是否会很慢,TableA_m表为百万数据,id没有索引。数据库总是在这句堵塞.TableA_m
是频繁使用的表。球解.
子查询
------解决方案--------------------UPDATE TableA
SET usd = ( SELECT SUM(usd)
FROM TableA_m
WHERE TableA.id = TableA.id --id上没有索引连接的处理就会很慢
)
WHERE TableA.id = @id --这处也是,直接就表扫描了。
--快添加上索引,比对一下执行计划,lz就能看出效果了
------解决方案--------------------1、红字部分是不是写错了?
update TableA set usd = (select sum(usd) from TableA_m
where
TableA.id = TableA.id)
where TableA.id=@id
2、你这个瞄了一下觉得的确有问题。
3、把执行计划贴出来看看
------解决方案--------------------最好加上索引,提高数据检索的效率
update TableA set usd = (select sum(usd) from TableA_m(nolock)
where TableA_m.id = @id)
where TableA.id=@id
------解决方案--------------------在两个表的id上加上索引,在TableA_m上的usd也加上索引。