读书人

请问sql优化

发布时间: 2013-02-17 10:44:46 作者: rapoo

请教sql优化
这句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,


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 s.gen_date >= to_date('"+earlietDate+"', 'yyyy-mm-dd')
and 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;

读书人网 >oracle

热点推荐