这句sql该怎么优化,数据量大的时候要执行一个多小时,慢死了
insert into swg_log_coll
(bank_no,
dep_name,
user_name,
full_name,
domain,
category,
gen_date,
log_state,
protocol,
hits,
addup_time,
record_cnt)
select bank_no,
nvl(dep_name, '--'),
nvl(user_name, '--'),
nvl(full_name, '--'),
nvl(domain, '--'),
nvl(category, '--'),
gen_date,
log_state,
nvl(protocol, '--'),
sum(hits),
sum(addup_time),
count(1)
from sr_swg_log_temp s)
where trunc(s.gen_date) >= to_date('"+earlietDate+"', 'yyyy-mm-dd')
and trunc(s.gen_date) <= to_date('"+madate+"', 'yyyy-mm-dd')
and log_state = '01'
group by bank_no,
dep_name,
user_name,
full_name,
domain,
gen_date,
category,
log_state,
protocol;
sql?优化? sql
------解决方案--------------------------------------------------------
where trunc(s.gen_date) >= to_date('"+earlietDate+"', 'yyyy-mm-dd') and trunc(s.gen_date) <= to_date('"+madate+"', 'yyyy-mm-dd') and log_state = '01'
这三个字段加上索引了吗, 另外 如果有索引的话 最好别用trunc,会停用索引的。
如果你加这个函数是为了去掉时分秒的话可以改成 where s.gen_date >=to_date('2013-01-30 00:00:01', 'yyyy-mm-dd hh24:mi:ss')
and s.gen_date <=to_date('2013-01-31 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
------解决方案--------------------------------------------------------
把trunc去掉,没必要,因为后面只到天
------解决方案--------------------------------------------------------
insert into swg_log_coll
(bank_no,
dep_name,
user_name,
full_name,
domain,
category,
gen_date,
log_state,
protocol,
hits,
addup_time,
record_cnt)
select bank_no,