update TableA set usd = (select sum(usd) from TableA_m
where TableA.id = TableA.id)
where TableA.id=@id
谁能解释下,这个写法是否会很慢,TableA_m表为百万数据,id没有索引。数据库总是在这句堵塞.TableA_m
是频繁使用的表。球解.子查询
where TableA.id = TableA.id)
where TableA.id=@id
谁能解释下,这个写法是否会很慢,TableA_m表为百万数据,id没有索引。数据库总是在这句堵塞.TableA_m
是频繁使用的表。球解.子查询
where TableA_m.id = TableA.id)
where TableA.id=@id
SET usd = ( SELECT SUM(usd)
FROM TableA_m
WHERE TableA.id = TableA.id --id上没有索引连接的处理就会很慢
)
WHERE TableA.id = @id --这处也是,直接就表扫描了。
--快添加上索引,比对一下执行计划,lz就能看出效果了
如果这个表不能建这个索引,那么有什么解决方案,
select @dbSum=sum(usd) from TableA_M where id=@id
update TableA set usd=@dbSum where id=@id
分两个是否效率会高?
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
1.此写法本身,是否很占用资源。表才100万级数据。经常产生堵塞。
2.无法建立索引情况下,有什么解决方案,因为一建立索引,此处就死锁,此表只有一个索引,就是TableA_M的明细m_ID..只要在 ID上建索引,数据库就经常死锁。如何解决上述问题?