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
这句在数据量大的时候执行起来会比较慢,请问该怎么优化?最好把能优化的都优化一遍

解决方案 »

  1.   

    你这个
    用exists 来代替 in 会好一些
      

  2.   

    你的这三个表的关联栏位咋关联的呢?VehicleActivity、VW_VEHICLE_COMPANY、VW_VEHICLE_COMPANY
    如果有明显的关联栏位,那么最好先过滤掉些资料,通过关联栏位换用exists要好些
      

  3.   


     改成普通的连接的查询试下看看   
    要是外表的数据少于嵌套的    就用exists
      

  4.   

    exists
    用这个吧,这个查询比in要快,只要满足子查询的先优先取出了
      

  5.   

    in 方式都是可以用exist来代替的!