日期:2014-05-17  浏览次数:20806 次

子查询求和并更新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也加上索引。