调整SQL更新查询

时间:2017-08-22 06:54:41

标签: sql oracle11g

我正在使用此更新查询,这需要大约8小时才能执行,我希望它花费更少的时间,我该怎么做?我的疑问是:

BEGIN
      LOOP
         UPDATE  ENCORE_LIVE.INSTRUMENT_CLASSIFICATION SET CODE = NULL WHERE TYPE_ID =
         15 AND CODE is not NULL
         and rownum < 50000;

         exit when SQL%rowcount < 49999;
         commit;
      END LOOP;
      commit;
END;

1 个答案:

答案 0 :(得分:1)

所以你要以50 000条记录的批量更新一张表,对吗?

您应该验证TYPE_ID表中的列CODEINSTRUMENT_CLASSIFICATION是否已编入索引,并最终创建索引。

同时检查this answer

您的UPDATE查询是基本的,无论如何都无法优化。要创建索引,您可以使用:

CREATE INDEX instrumentClasification_TypeCode_idx
     ON ENCORE_LIVE.INSTRUMENT_CLASSIFICATION
        (TYPE_ID, CODE)

此外,您应该考虑在一个批处理中运行更新查询,而无需批量分割。