c_plan中大概有40万条记录 下面这条语句是根据输入的开始结束时刻查询每月的计划起飞架次(STD)
但是不知道为什么响应时间很长 有三四分钟 简直不能接受  求大神帮忙改进 提高查询速度 小弟不甚感激 也非常欢迎有其他语句
select to_char(TRUNC (add_months(to_date('2015-08-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'),(b.no-1)),'mm'),'YYYY-MM') name,
(select count(distinct planid) from c_plan a where (adep ='ZBAA') and 
 STD BETWEEN TRUNC (add_months(to_date('2015-08-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'),(b.no-1)),'mm')
 and TRUNC (add_months(to_date('2015-08-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'),b.no),'mm')-1/86400  ) as value  
from (select level no from dual connect by level <=
(select ceil(MONTHS_BETWEEN(to_date('2016-10-01 23:59:59','YYYY-MM-DD HH24:MI:SS'),to_date('2015-08-01 00:00:00','YYYY-MM-DD HH24:MI:SS')))from dual)) b

解决方案 »

  1.   

    其实表还挺长的:
    -- 计划唯一号
    planid varchar2(64) ,
    -- 添加时间
    t_add date default sysdate ,
    -- 最后修改时间
    t_mod date default sysdate ,
    -- 计划终止/删除时间
    t_del date ,
    -- 计划号
    planno number(6) ,
    -- 航班号
    acid varchar2(8) ,
    -- 起飞机场
    adep varchar2(4) ,
    -- 降落机场
    ades varchar2(4) ,
    -- 计划起飞时间
    std date ,
    -- 预计起飞时间
    etd date ,
    -- 实际起飞时间
    atd date ,
    -- 计划降落时间
    sta date ,
    -- 预计降落时间
    eta date ,
    -- 实际降落时间
    ata date ,
    -- 实际推出时间
    atp date ,
    -- COBT
    ctp date ,
    -- CTOT
    ctd date ,
    -- TOBT
    tobt date ,
    -- TSAT
    tsat date ,
    -- 航空公司输入准备好时间
    ardt date ,
    -- 开始滑行时间
    tax_time date ,
    -- 塔台给出准备好时间
    rdy_time date ,
    -- 计划状态
    status  varchar2(4) ,
    -- 起飞跑道
    rwy_dep varchar2(3) ,
    -- 降落跑道
    rwy_arr varchar2(3) ,
    -- 起降标志
    flytype  number(1) ,
    -- 机型
    planetype  varchar2(4) ,
    -- 尾流
    turb varchar2(1) ,
    -- 备降机场
    altn varchar2(4) ,
    -- 注册号
    plane_ident varchar2(10) ,
    -- VIP标志
    vvip varchar2(1) ,
    -- 任务
    task varchar(4) ,
    -- 国内外属性
    company_country number(1) ,
    -- 停机位
    gate varchar2(5) ,
    -- 翼展
    wing varchar(1) ,
    -- 可变滑行时间
    vtt number(2) ,
    -- 大方向
    direction  number(1) ,
    -- 大方向下小方向
    dir_detail number(1) ,
    -- 离港点
    corridor_dep varchar(10) ,
    -- 进港点
    corridor_arr varchar(10) ,
    -- 出界点
    point_outer varchar(10) ,
    -- 入界点
    point_inner varchar(10) ,
    -- 对应的流控原因
    res_reason number(2) ,
    -- 锁定的CTOT
    ctd_lock date ,
    -- 第一次CTOT
    ctdFPL0 date ,
    -- 第一次COBT
    ctpFPL0 date ,
    -- EOBT前1小时的CTOT
    ctdFPL6 date ,
    -- EOBT前1小时的COBT
    ctpFPL6 date ,
    -- EOBT前30分钟的CTOT
    ctdFPL3 date ,
    -- EOBT前30分钟的COBT
    ctpFPL3 date ,
    -- RDY时的CTOT
    ctdRDY date ,
    -- RDY时的COBT
    ctpRDY date ,
    -- 推出时的CTOT
    ctdPUSH date ,
    -- 推出时的COBT
    ctpPUSH date ,
    -- LIN时的CTOT
    ctdLIN date ,
    -- 开始除冰时间
    deice_beg date ,
    -- 结束除冰时间
    deice_end date ,
    -- 预计除冰时长
    deice_pre number(2) ,
    -- 除冰位
    deice_pos varchar(10) ,
    -- 除冰区
    deice_area varchar(10) ,
    -- 除冰标志
    deice_flag number(1) ,
    -- 第一次TSAT
    TSAT_first date ,
    -- TOBT输入人员
    TOBT_name varchar2(10) ,
    -- 等待标志
    wait_flag number(1) ,
    -- 进入等待池方式
    wait_reason number(1) ,
    -- 出等待池时刻
    wait_outTime date ,
    -- 出等待池方式
    wait_outType number(1) ,
    -- 最小TOBT
    tobt_min date ,
    -- 最大TOBT
    tobt_max date ,
    -- 航空公司
    company  varchar(5) ,
    -- 分析出来的原因
    delay_10 varchar(4) ,
    -- 流量系统判断出来的原因
    delay_11 varchar(4) ,
    -- 塔台给出的原因
    delay_12 varchar(4) ,
    -- 公司给出的原因
    delay_13 varchar(4) ,
    -- 前飞航班
    prev_planid varchar(64) ,
    -- 原始航路
    route varchar2(300) ,
    -- 解析航路
    route_ana varchar2(1024) ,
    -- 主航路
    route_main varchar(10) ,
    -- 输入TOBT的来源
    tobt_type number(1) ,
    -- 受限标志
    limit_flag number(1) ,
    -- 备注
    add_msg varchar2(200) ,
    -- 最终延误原因
    delay_reason varchar2(4) ,
    -- 实际开始登机时间
    ASBT            date ,
    -- 实际关舱门时间
    GCTM            date ,
    -- 实际除冰开始时间
    ACZT            date ,
    -- 实际除冰结束时间
    AEZT            date ,
    -- 到达除冰等待位时间
    DIHD            date ,
    -- 进入除冰位时间
    DIIN            date ,
    -- 滑出除冰位时间
    DITO            date ,
    -- 塔台原始延误原因
    delay_twr_org varchar2(100) ,
    -- 入位时间
    t_ove date
      

  2.   

    select to_char(TRUNC (add_months(to_date('2015-08-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'),(b.no-1)),'mm'),'YYYY-MM') name,
      c.value  ,
    from (select level no from dual connect by level <=
    (select ceil(MONTHS_BETWEEN(to_date('2016-10-01 23:59:59','YYYY-MM-DD HH24:MI:SS'),to_date('2015-08-01 00:00:00','YYYY-MM-DD HH24:MI:SS')))from dual)) b,
    (select count(distinct planid) as value from c_plan a where (adep ='ZBAA') and 
      ) c
     where c.STD(+) BETWEEN TRUNC (add_months(to_date('2015-08-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'),(b.no-1)),'mm')
     and TRUNC (add_months(to_date('2015-08-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'),b.no),'mm')-1/86400 
    ;