select
VI_Terminal_ID as VehicleID
, max(VA_MaxSpeed) MaxSpeed
, sum(
case when VA_Type = 0 then VA_mileage else 0 end
)as Mileage
, sum(
case when VA_Type = 0 then VA_timebetween else 0 end
) RunTimePerDay
, sum(
case when VA_Type = 1 then VA_timebetween else 0 end
) DaiSuTimePerDay
, sum(
case when VA_Type = 2 then VA_timebetween else 0 end
) StopTimePerDay
, sum(
case when VA_Type = 3 then VA_timebetween else 0 end
) OffLineTimePerDay
from VehicleActivity
where 1=1
and VA_StartTime >= to_date('2009-11-26 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
and VA_EndTime <= to_date('2009-11-26 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
and VI_Terminal_ID in(
select VI_Vehicle_ID
from VW_VEHICLE_COMPANY
where 1=1
and IS_TERMINAL = 1
and CI_PID in (
select CI_ID from VW_VEHICLE_COMPANY
where 1=1
and VI_ID = 0
start with CI_ID = '1141'
connect by prior CI_ID = CI_PID
)
)
group by VI_Terminal_ID
这句在数据量大的时候执行起来会比较慢,请问该怎么优化?最好把能优化的都优化一遍
VI_Terminal_ID as VehicleID
, max(VA_MaxSpeed) MaxSpeed
, sum(
case when VA_Type = 0 then VA_mileage else 0 end
)as Mileage
, sum(
case when VA_Type = 0 then VA_timebetween else 0 end
) RunTimePerDay
, sum(
case when VA_Type = 1 then VA_timebetween else 0 end
) DaiSuTimePerDay
, sum(
case when VA_Type = 2 then VA_timebetween else 0 end
) StopTimePerDay
, sum(
case when VA_Type = 3 then VA_timebetween else 0 end
) OffLineTimePerDay
from VehicleActivity
where 1=1
and VA_StartTime >= to_date('2009-11-26 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
and VA_EndTime <= to_date('2009-11-26 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
and VI_Terminal_ID in(
select VI_Vehicle_ID
from VW_VEHICLE_COMPANY
where 1=1
and IS_TERMINAL = 1
and CI_PID in (
select CI_ID from VW_VEHICLE_COMPANY
where 1=1
and VI_ID = 0
start with CI_ID = '1141'
connect by prior CI_ID = CI_PID
)
)
group by VI_Terminal_ID
这句在数据量大的时候执行起来会比较慢,请问该怎么优化?最好把能优化的都优化一遍
用exists 来代替 in 会好一些
如果有明显的关联栏位,那么最好先过滤掉些资料,通过关联栏位换用exists要好些
改成普通的连接的查询试下看看
要是外表的数据少于嵌套的 就用exists
用这个吧,这个查询比in要快,只要满足子查询的先优先取出了