我有一张统计表,数据量非常大,现在我通过下列语句修改表中的内容,单速度很慢,设置会卡死,请问下我的这条语句可以进行怎样的优化好呢?使用的是hql,也可以转换为sql语句。
语句如下:update TStatistic t
   set t.configcount = 0.8, t.statisticCloseState = 0
 where t.flowid = 225
   and t.statisticprojectid = 2
   and t.statisticCloseState = 2
   and t.tacheid = 2716
   and t.photoCount = 10

解决方案 »

  1.   

    update操作,如果表上有index ,数据量很大,那么就是你这种情况
    首先要屏蔽掉index,然后再做update动作
      

  2.   

    update与index的关系要从两个方面说.
    一方面,如果你要无差别的更新全部数据,那么index在一定程度上影响了效率.
    另一方面,如果你只是更新一条数据,那么还是有索引更快些,因为能更快的定位要删除的数据,不必走全表扫描.
    当然上面说的是两种极端情况.
      

  3.   

    表上有索引吗?
    若有的话,请将where 条件后的字段进行排序:主键或唯一索引的排在最左边,那样索引才起作用;
    假设statisticprojectid是索引的话,其他字段都没有建立索引,那么应该这样写:
    update TStatistic t
       set t.configcount = 0.8, t.statisticCloseState = 0
     where t.statisticprojectid = 2
    and  t.flowid = 225   
       and t.statisticCloseState = 2
       and t.tacheid = 2716
       and t.photoCount = 10
      

  4.   

    调整一下 where的条件的顺序。
      

  5.   

    你可以把条件分开,每次更新一部分
    或者根据rownum,一次更新指定数量的数据 这样会快一点