日期:2014-05-17  浏览次数:20864 次

那位大侠优化一下这个sql语句,耗时57分钟啊...
表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分钟,有什么具体办法(比如加索引什么的)可以提高这个语句的速度,或者用什么别的语句提高速度?

------解决方案--------------------
建一张临时表
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)
------解决方案--------------------
在关联查询的字段serv_group_id上建立索引:

CREATE INDEX ix_serv_group_id
ON check_serv_group_price (serv_group_id);