update  TableA set usd = (select sum(usd) from TableA_m
where TableA.id = TableA.id)
where TableA.id=@id
谁能解释下,这个写法是否会很慢,TableA_m表为百万数据,id没有索引。数据库总是在这句堵塞.TableA_m
是频繁使用的表。球解.子查询

解决方案 »

  1.   

    update  TableA set usd = (select sum(usd) from TableA_m
    where TableA_m.id = TableA.id)
    where TableA.id=@id
      

  2.   

    UPDATE  TableA
    SET     usd = ( SELECT  SUM(usd)
                    FROM    TableA_m
                    WHERE   TableA.id = TableA.id  --id上没有索引连接的处理就会很慢
                  )
    WHERE   TableA.id = @id  --这处也是,直接就表扫描了。
    --快添加上索引,比对一下执行计划,lz就能看出效果了
      

  3.   


    如果这个表不能建这个索引,那么有什么解决方案,
    select @dbSum=sum(usd) from TableA_M where id=@id
    update TableA set usd=@dbSum where id=@id
    分两个是否效率会高?
      

  4.   

    1、红字部分是不是写错了?
    update  TableA set usd = (select sum(usd) from TableA_m
    where TableA.id = TableA.id)
    where TableA.id=@id
    2、你这个瞄了一下觉得的确有问题。
    3、把执行计划贴出来看看
      

  5.   

    最好加上索引,提高数据检索的效率
    update  TableA set usd = (select sum(usd) from TableA_m(nolock)
    where TableA_m.id = @id)
    where TableA.id=@id
      

  6.   

    是。1楼TableA_m.id = TableA.id计划是说表扫描。占用99%。。但是该怎么解决这个问题。如果我建立索引,这个表就经常死锁。
      

  7.   

    在两个表的id上加上索引,在TableA_m上的usd也加上索引。
      

  8.   

    我想知道的2个问题:
    1.此写法本身,是否很占用资源。表才100万级数据。经常产生堵塞。
    2.无法建立索引情况下,有什么解决方案,因为一建立索引,此处就死锁,此表只有一个索引,就是TableA_M的明细m_ID..只要在 ID上建索引,数据库就经常死锁。如何解决上述问题?