那位大侠优化一下这个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);