表check_serv_group_price字段如下,约有10万条记录
SERV_ID NUMBER(12)
PRICING_PLAN_ID NUMBER(9)
SERV_GROUP_ID NUMBER(12)
MIN_SERV_ID NUMBER(12)表里多个serv_id对应同一个serv_group_id,更新字段min_serv_id为同一个serv_group_id中最小的serv_id.
update check_serv_group_price a
   set min_serv_id = (select min(serv_id)
                        from check_serv_group_price
                       where a.serv_group_id = serv_group_id);
这个耗时57分钟,有什么具体办法(比如加索引什么的)可以提高这个语句的速度,或者用什么别的语句提高速度?

解决方案 »

  1.   

    建一张临时表
    create table temp as
    select serv_group_id,min(serv_id) m_servid
                            from check_serv_group_price
    group by serv_group_id;然后建索引
    然后更新
    update check_serv_group_price a
    set min_serv_id=(select b.m_servid from temp b where a.serv_group_id=b.serv_group_id)
      

  2.   

    在关联查询的字段serv_group_id上建立索引:CREATE INDEX ix_serv_group_id   
    ON check_serv_group_price (serv_group_id);