ROW_NUMBER () OVER 不走索引

【 使用环境 】生产环境
【 OB or 其他组件 】OB
【 使用版本 】4.1.2
【问题描述】sql 查询慢row_number() over 不走索引
【复现路径】问题出现前后相关操作
【问题现象及影响】

explain with t1 as (
select
  /*+INDEX( t1 duty_node_index )*/
  `id` AS `id`,
  `pairing_id` AS `pairing_id`,
  `duty_id` AS `duty_id`,
  `sequence` AS `sequence`,
  `type` AS `type`,
  `node` AS `node`,
  `from_segment_id` AS `from_segment_id`,
  `to_segment_id` AS `to_segment_id`,
  `group_id` AS `group_id`,
  `airport` AS `airport`,
  `start_utc` AS `start_utc`,
  `end_utc` AS `end_utc`,
  `scenario_id` AS `scenario_id`,
  `modified_by` AS `modified_by`,
  `last_modified` AS `last_modified`,
  `is_manual_modify` AS `is_manual_modify`
from
  stg_rd_gjlive_pairing_duty_node t1
where
  t1.node = 'BRIEF'
union all
select
  /*+INDEX( t1 duty_node_index )*/
  `id` AS `id`,
  `pairing_id` AS `pairing_id`,
  `duty_id` AS `duty_id`,
  `sequence` AS `sequence`,
  `type` AS `type`,
  `node` AS `node`,
  `from_segment_id` AS `from_segment_id`,
  `to_segment_id` AS `to_segment_id`,
  `group_id` AS `group_id`,
  `airport` AS `airport`,
  `start_utc` AS `start_utc`,
  `end_utc` AS `end_utc`,
  `scenario_id` AS `scenario_id`,
  `modified_by` AS `modified_by`,
  `last_modified` AS `last_modified`,
  `is_manual_modify` AS `is_manual_modify`
from
  stg_rd_gjlive_pairing_duty_node t1
where
  t1.node = 'DEBRIEF'
),
t2 as (
select
  /*+INDEX(a roster_index_flt_id) INDEX(b stg_rd_gjlive_flight_index) INDEX(c stg_rd_gjlive_crew_index) INDEX(d stg_rd_gjlive_rank_position_index) INDEX(e stg_rd_gjlive_rank_index) INDEX(f qtuitechinfo_index) INDEX(h crew_base_index_crew_id) INDEX(h crew_base_index_crew_id) INDEX(i inneruser_index)*/
  `a`.`id` AS `Tid`,
  `b`.`interface_flt_id` AS `FlightId`,
  `b`.`flt_dt` AS `FlightDate`,
  CONCAT(`b`.`airline`, `b`.`flt_num`) AS `FlightNo`,
  `b`.`fleet` AS `AcType`,
  `b`.`register` AS `AcReg`,(`b`.`sch_dep_dt_utc` + interval 8 hour) AS `StartTime`,
  (`b`.`sch_arv_dt_utc` + interval 8 hour) AS `EndTime`,
  `b`.`dep_arp` AS `DepartureAirport`,
  `b`.`arv_arp` AS `ArrivalAirport`,
  `a`.`pairing_id` AS `PairingId`,
  `a`.`duty_id` AS `DutyId`,
  `a`.`crew_id` AS `CrewId`,
  CONCAT(`c`.`last_name`, `c`.`first_name`) AS `CrewName`,
  `c`.`passport_last_name` AS `CrewFirstName`,
  `c`.`passport_first_name` AS `CrewLastName`,
  `c`.`employee_no` AS `WorkNum`,
  `a`.`position` AS `AuthCode`,
  `d`.`description` AS `AuthName`,
  `a`.`acting_rank` AS `RankCode`,
  `e`.`description` AS `RankName`,(
    case `b`.`flight_flag`
    when 'B' then 'SBY'
    when 'D' then 'VITFLT'
    when 'C' then 'TRAINING'
    when 'S' then 'TRAINING'
    else `a`.`assignment`
    end
  ) AS `DutyTypeGround`,(
    case `a`.`assignment`
    when 'SBY-Z' then 'ZB'
    when 'SBY-C' then 'CB'
    when 'SBY-Z-XZ' then 'XZZB'
    when 'SBY-C-ZX' then 'XZCB'
    else `a`.`assignment`
    end
  ) AS `DutyType`,(
    case `c`.`gender`
    when 'M' then '男'
    when 'F' then '女'
    else ''
    end
  ) AS `Sex`,
  `c`.`tel` AS `Phone`,
  `a`.`seq_order` AS `SeqOrder`,
  `c`.`nationality` AS `Nationality`,
  `a`.`check_type` AS `CheckType`,
  `a`.`ts_flag` AS `TsFlag`,
  `a`.`division` AS `ModelFlag`,
  `h`.`base` AS `CrewBase`,
  `i`.`Tid` AS `TI_UserTid`
from
  stg_rd_gjlive_roster_publish as `a`  FORCE INDEX (PRIMARY,roster_index_flt_id)
  left join `db_ods`.`stg_rd_gjlive_flight` `b` on (`a`.`flt_id` = `b`.`id`)
  left join `db_ods`.`stg_rd_gjlive_crew` `c` on (`a`.`crew_id` = `c`.`crew_id`)
  left join `db_ods`.`stg_rd_gjlive_rank_position` `d` on (`a`.`position` = `d`.`position`)
  left join `db_ods`.`stg_rd_gjlive_rank` `e` on (`a`.`acting_rank` = `e`.`rank`)
  left join `db_ods`.`stg_rd_qt_t_inneruser` `i` on (`a`.`crew_id` = `i`.`U_LoginName`)
  left join `db_ods`.`stg_rd_gjlive_crew_base` `h` on (`a`.`crew_id` = `h`.`crew_id`)
),
t3 as (
select
  /*+INDEX(stg_rd_qt_t_qtuitechinfo qtuitechinfo_index)*/
  f.`Status` AS `Status`,
  f.`TI_UserTid` AS `TI_UserTid`,
  f.`TI_UserName` AS `TI_UserName`,
  f.`TI_TechCode` AS `TI_TechCode`,
  max(f.`TI_TechDate`) AS `TI_TechDate`,
  g.`TG_TechName` AS `TechName`
from
  stg_rd_qt_t_qtuitechinfo f
  LEFT JOIN stg_rd_qt_t_qtbitechnicalgrade g on (g.Status = f.Status)
  and (g.TG_TechCode = f.TI_TechCode)
where
  f.Status = 1
  GROUP BY  f.`Status`,
  f.`TI_UserTid`,
  f.`TI_UserName`,
  f.`TI_TechCode`,
  g.`TG_TechName`
  ORDER BY f.`TI_TechDate` DESC 
)
select
  /*+INDEX(stg_rd_gjlive_roster_publish roster_index_flt_id) INDEX(stg_rd_gjlive_rank stg_rd_gjlive_rank_index) INDEX(stg_rd_qt_t_qtuitechinfo qtuitechinfo_index,qtuitechinfo_date_index)*/
t2.Tid,
t2.FlightId,
t2.FlightDate,
t2.FlightNo,
t2.AcType,
t2.AcReg,
t2.StartTime,
t2.EndTime,
t2.DepartureAirport,
t2.ArrivalAirport,
t2.PairingId,
t2.DutyId,
t2.CrewId,
t2.CrewName,
t2.CrewFirstName,
t2.CrewLastName,
t2.WorkNum,
t2.AuthCode,
t2.AuthName,
t2.RankCode,
t2.RankName,
t2.DutyTypeGround,
t2.DutyType,
t2.Sex,
t2.Phone,
t2.SeqOrder,
t2.Nationality,
t2.CheckType,
t2.TsFlag,
t2.ModelFlag,
t2.CrewBase,
 (t1.`start_utc` + interval 8 hour) AS `CheckInTime`,
  (t1.`end_utc` + interval 8 hour) AS `CheckOutTime`,
t4.TI_TechCode AS `TechCode`,
t4.TechName AS `TechName`,
ROW_NUMBER () OVER (
      PARTITION BY t2.tid
      ORDER BY
        t4.TI_TechDate DESC
    ) AS RN
from
t2
left join t1 on t1.duty_id = t2.DutyId
join(select TI_UserTid,TI_TechCode,TechName,max(TI_TechDate) As TI_TechDate from t3 GROUP BY TI_UserTid,TechName,TI_TechCode) t4 on t2.TI_UserTid = t4.TI_UserTid
where
 t2.`FlightDate` >= `t4`.`TI_TechDate`
;

执行计划:

Query Plan
================================================================================================
|ID|OPERATOR                        |NAME                              |EST.ROWS  |EST.TIME(us)|
------------------------------------------------------------------------------------------------
|0 |WINDOW FUNCTION                 |                                  |1845142889|18676242334 |
|1 | PARTITION SORT                 |                                  |1845142889|8906574974  |
|2 |  HASH RIGHT OUTER JOIN         |                                  |1845142889|27764054    |
|3 |   PX COORDINATOR               |                                  |5314      |25122       |
|4 |    EXCHANGE OUT DISTR          |:EX10000                          |5314      |17471       |
|5 |     TABLE SCAN                 |h                                 |5314      |264         |
|6 |   HASH JOIN                    |                                  |35426333  |18414105    |
|7 |    PX COORDINATOR              |                                  |12821     |98186       |
|8 |     EXCHANGE OUT DISTR         |:EX20000                          |12821     |75243       |
|9 |      SUBPLAN SCAN              |t4                                |12821     |23629       |
|10|       HASH GROUP BY            |                                  |12821     |23595       |
|11|        SUBPLAN SCAN            |t3                                |12821     |15701       |
|12|         HASH GROUP BY          |                                  |12821     |15667       |
|13|          HASH RIGHT OUTER JOIN |                                  |12821     |5659        |
|14|           TABLE SCAN           |g(qtbitechnicalgrade_status_index)|28        |81          |
|15|           TABLE SCAN           |f                                 |12821     |2187        |
|16|    HASH JOIN                   |                                  |82695521  |11387235    |
|17|     PX COORDINATOR             |                                  |9976      |28851       |
|18|      EXCHANGE OUT DISTR        |:EX30000                          |9976      |20147       |
|19|       TABLE SCAN               |i                                 |9976      |585         |
|20|     HASH JOIN                  |                                  |845710    |11130893    |
|21|      PX COORDINATOR            |                                  |304951    |6511638     |
|22|       EXCHANGE OUT DISTR       |:EX40000                          |304951    |4530218     |
|23|        TABLE SCAN              |b                                 |304951    |69872       |
|24|      HASH RIGHT OUTER JOIN     |                                  |700768    |4101708     |
|25|       PX COORDINATOR           |                                  |26        |125         |
|26|        EXCHANGE OUT DISTR      |:EX50000                          |26        |88          |
|27|         TABLE SCAN             |e                                 |26        |3           |
|28|       HASH RIGHT OUTER JOIN    |                                  |700768    |3917178     |
|29|        TABLE SCAN              |d                                 |29        |4           |
|30|        HASH RIGHT OUTER JOIN   |                                  |700768    |3732767     |
|31|         TABLE SCAN             |c                                 |4682      |854         |
|32|         HASH RIGHT OUTER JOIN  |                                  |700768    |3539667     |
|33|          PX COORDINATOR        |                                  |11417     |3226410     |
|34|           EXCHANGE OUT DISTR   |:EX60000                          |11417     |3220119     |
|35|            SUBPLAN SCAN        |t1                                |11417     |3205994     |
|36|             UNION ALL          |                                  |11417     |3205964     |
|37|              TABLE SCAN        |t1(duty_node_index)               |5709      |1602967     |
|38|              TABLE SCAN        |t1(duty_node_index)               |5709      |1602967     |
|39|          TABLE SCAN            |a                                 |700768    |251740      |
================================================================================================
Outputs & filters:
-------------------------------------
  0 - output([a.id], [b.interface_flt_id], [b.flt_dt], [CONCAT(cast(b.airline, VARCHAR(1048576)), cast(b.flt_num, VARCHAR(1048576)))], [b.fleet], [b.register],
[date_add(b.sch_dep_dt_utc, cast(8, VARCHAR(1048576)), 3)], [date_add(b.sch_arv_dt_utc, cast(8, VARCHAR(1048576)), 3)], [b.dep_arp], [b.arv_arp], [a.pairing_id],
[a.duty_id], [a.crew_id], [CONCAT(cast(c.last_name, VARCHAR(1048576)), cast(c.first_name, VARCHAR(1048576)))], [c.passport_last_name], [c.passport_first_name],
[c.employee_no], [a.position], [d.description], [a.acting_rank], [e.description], [CASE WHEN cast(b.flight_flag, MEDIUMTEXT(16777216)) = cast('B', MEDIUMTEXT(16777216))
THEN cast('SBY', LONGTEXT(536870911)) WHEN cast(b.flight_flag, MEDIUMTEXT(16777216)) = cast('D', MEDIUMTEXT(16777216)) THEN cast('VITFLT', LONGTEXT(536870911))
WHEN cast(b.flight_flag, MEDIUMTEXT(16777216)) = cast('C', MEDIUMTEXT(16777216)) THEN cast('TRAINING', LONGTEXT(536870911)) WHEN cast(b.flight_flag, MEDIUMTEXT(16777216))
= cast('S', MEDIUMTEXT(16777216)) THEN cast('TRAINING', LONGTEXT(536870911)) ELSE cast(a.assignment, LONGTEXT(536870911)) END], [CASE WHEN cast(a.assignment,
MEDIUMTEXT(16777216)) = cast('SBY-Z', MEDIUMTEXT(16777216)) THEN cast('ZB', LONGTEXT(536870911)) WHEN cast(a.assignment, MEDIUMTEXT(16777216)) = cast('SBY-C',
MEDIUMTEXT(16777216)) THEN cast('CB', LONGTEXT(536870911)) WHEN cast(a.assignment, MEDIUMTEXT(16777216)) = cast('SBY-Z-XZ', MEDIUMTEXT(16777216)) THEN cast('XZZB',
LONGTEXT(536870911)) WHEN cast(a.assignment, MEDIUMTEXT(16777216)) = cast('SBY-C-ZX', MEDIUMTEXT(16777216)) THEN cast('XZCB', LONGTEXT(536870911)) ELSE
cast(a.assignment, LONGTEXT(536870911)) END], [CASE WHEN cast(c.gender, MEDIUMTEXT(16777216)) = cast('M', MEDIUMTEXT(16777216)) THEN '男' WHEN cast(c.gender,
MEDIUMTEXT(16777216)) = cast('F', MEDIUMTEXT(16777216)) THEN '女' ELSE '' END], [c.tel], [a.seq_order], [c.nationality], [a.check_type], [a.ts_flag], [a.division],
[h.base], [date_add(t1.start_utc, cast(8, VARCHAR(1048576)), 3)], [date_add(t1.end_utc, cast(8, VARCHAR(1048576)), 3)], [t4.TI_TechCode], [t4.TechName],
[T_WIN_FUN_ROW_NUMBER()]), filter(nil), rowset=256
      win_expr(T_WIN_FUN_ROW_NUMBER()), partition_by([a.id]), order_by([t4.TI_TechDate, DESC]), window_type(RANGE), upper(UNBOUNDED PRECEDING), lower(UNBOUNDED
FOLLOWING)
  1 - output([a.id], [b.interface_flt_id], [b.flt_dt], [b.fleet], [b.register], [b.dep_arp], [b.arv_arp], [a.pairing_id], [a.duty_id], [a.crew_id], [c.passport_last_name],
[c.passport_first_name], [c.employee_no], [a.position], [d.description], [a.acting_rank], [e.description], [c.tel], [a.seq_order], [c.nationality], [a.check_type],
[a.ts_flag], [a.division], [h.base], [t4.TI_TechCode], [t4.TechName], [t4.TI_TechDate], [b.airline], [b.flt_num], [b.sch_dep_dt_utc], [b.sch_arv_dt_utc],
[b.flight_flag], [c.last_name], [c.first_name], [c.gender], [t1.start_utc], [t1.end_utc], [a.assignment]), filter(nil), rowset=256
      sort_keys([HASH(a.id), ASC], [a.id, ASC], [t4.TI_TechDate, DESC])
  2 - output([a.id], [b.interface_flt_id], [b.flt_dt], [b.fleet], [b.register], [b.dep_arp], [b.arv_arp], [a.pairing_id], [a.duty_id], [a.crew_id], [c.passport_last_name],
[c.passport_first_name], [c.employee_no], [a.position], [d.description], [a.acting_rank], [e.description], [c.tel], [a.seq_order], [c.nationality], [a.check_type],
[a.ts_flag], [a.division], [h.base], [t4.TI_TechCode], [t4.TechName], [t4.TI_TechDate], [b.airline], [b.flt_num], [b.sch_dep_dt_utc], [b.sch_arv_dt_utc],
[b.flight_flag], [c.last_name], [c.first_name], [c.gender], [t1.start_utc], [t1.end_utc], [a.assignment]), filter(nil), rowset=256
      equal_conds([a.crew_id = h.crew_id]), other_conds(nil)
  3 - output([h.base], [h.crew_id]), filter(nil), rowset=256
  4 - output([h.base], [h.crew_id]), filter(nil), rowset=256
      is_single, dop=1
  5 - output([h.crew_id], [h.base]), filter(nil), rowset=256
      access([h.crew_id], [h.base]), partitions(p0)
      is_index_back=false, is_global_index=false, 
      range_key([h.id]), range(MIN ; MAX)always true
  6 - output([a.id], [b.interface_flt_id], [b.flt_dt], [b.fleet], [b.register], [b.dep_arp], [b.arv_arp], [a.pairing_id], [a.duty_id], [a.crew_id], [c.passport_last_name],
[c.passport_first_name], [c.employee_no], [a.position], [d.description], [a.acting_rank], [e.description], [c.tel], [a.seq_order], [c.nationality], [a.check_type],
[a.ts_flag], [a.division], [t4.TI_TechCode], [t4.TechName], [t4.TI_TechDate], [b.airline], [b.flt_num], [b.sch_dep_dt_utc], [b.sch_arv_dt_utc], [b.flight_flag],
[c.last_name], [c.first_name], [c.gender], [t1.start_utc], [t1.end_utc], [a.assignment]), filter(nil), rowset=256
      equal_conds([i.Tid = t4.TI_UserTid]), other_conds([b.flt_dt >= t4.TI_TechDate])
  7 - output([t4.TI_TechCode], [t4.TechName], [t4.TI_TechDate], [t4.TI_UserTid]), filter(nil), rowset=256
  8 - output([t4.TI_TechCode], [t4.TechName], [t4.TI_TechDate], [t4.TI_UserTid]), filter(nil), rowset=256
      is_single, dop=1
  9 - output([t4.TI_UserTid], [t4.TI_TechDate], [t4.TI_TechCode], [t4.TechName]), filter(nil), rowset=256
      access([t4.TI_UserTid], [t4.TI_TechDate], [t4.TI_TechCode], [t4.TechName])
 10 - output([t3.TI_UserTid], [t3.TI_TechCode], [t3.TechName], [T_FUN_MAX(t3.TI_TechDate)]), filter(nil), rowset=256
      group([t3.TI_UserTid], [t3.TechName], [t3.TI_TechCode]), agg_func([T_FUN_MAX(t3.TI_TechDate)])
 11 - output([t3.TI_UserTid], [t3.TI_TechCode], [t3.TechName], [t3.TI_TechDate]), filter(nil), rowset=256
      access([t3.TI_UserTid], [t3.TI_TechCode], [t3.TechName], [t3.TI_TechDate])
 12 - output([f.TI_UserTid], [f.TI_TechCode], [T_FUN_MAX(f.TI_TechDate)], [g.TG_TechName]), filter(nil), rowset=256
      group([f.TI_UserTid], [f.TI_UserName], [f.TI_TechCode], [g.TG_TechName]), agg_func([T_FUN_MAX(f.TI_TechDate)])
 13 - output([f.TI_UserTid], [f.TI_UserName], [f.TI_TechCode], [g.TG_TechName], [f.TI_TechDate]), filter(nil), rowset=256
      equal_conds([g.TG_TechCode = f.TI_TechCode]), other_conds(nil)
 14 - output([g.TG_TechCode], [g.TG_TechName]), filter(nil), rowset=256
      access([g.Tid], [g.TG_TechCode], [g.TG_TechName]), partitions(p0)
      is_index_back=true, is_global_index=false, 
      range_key([g.Status], [g.__substr512_24], [g.Tid]), range(1,MIN,MIN ; 1,MAX,MAX), 
      range_cond([g.Status = 1])
 15 - output([f.TI_TechCode], [f.TI_UserTid], [f.TI_UserName], [f.TI_TechDate]), filter([f.Status = 1]), rowset=256
      access([f.TI_TechCode], [f.Status], [f.TI_UserTid], [f.TI_UserName], [f.TI_TechDate]), partitions(p0)
      is_index_back=false, is_global_index=false, filter_before_indexback[false], 
      range_key([f.Tid]), range(MIN ; MAX)always true
 16 - output([a.id], [b.interface_flt_id], [b.flt_dt], [b.fleet], [b.register], [b.dep_arp], [b.arv_arp], [a.pairing_id], [a.duty_id], [a.crew_id], [c.passport_last_name],
[c.passport_first_name], [c.employee_no], [a.position], [d.description], [a.acting_rank], [e.description], [c.tel], [a.seq_order], [c.nationality], [a.check_type],
[a.ts_flag], [a.division], [i.Tid], [b.airline], [b.flt_num], [b.sch_dep_dt_utc], [b.sch_arv_dt_utc], [b.flight_flag], [c.last_name], [c.first_name], [c.gender],
[t1.start_utc], [t1.end_utc], [a.assignment]), filter(nil), rowset=256
      equal_conds([a.crew_id = i.U_LoginName]), other_conds(nil)
 17 - output([i.Tid], [i.U_LoginName]), filter(nil), rowset=256
 18 - output([i.Tid], [i.U_LoginName]), filter(nil), rowset=256
      is_single, dop=1
 19 - output([i.Tid], [i.U_LoginName]), filter(nil), rowset=256
      access([i.Tid], [i.U_LoginName]), partitions(p0)
      is_index_back=false, is_global_index=false, 
      range_key([i.Tid]), range(MIN ; MAX)always true
 20 - output([a.id], [b.interface_flt_id], [b.flt_dt], [b.fleet], [b.register], [b.dep_arp], [b.arv_arp], [a.pairing_id], [a.duty_id], [a.crew_id], [c.passport_last_name],
[c.passport_first_name], [c.employee_no], [a.position], [d.description], [a.acting_rank], [e.description], [c.tel], [a.seq_order], [c.nationality], [a.check_type],
[a.ts_flag], [a.division], [b.airline], [b.flt_num], [b.sch_dep_dt_utc], [b.sch_arv_dt_utc], [b.flight_flag], [c.last_name], [c.first_name], [c.gender],
[t1.start_utc], [t1.end_utc], [a.assignment]), filter(nil), rowset=256
      equal_conds([a.flt_id = b.id]), other_conds(nil)
 21 - output([b.interface_flt_id], [b.flt_dt], [b.fleet], [b.register], [b.dep_arp], [b.arv_arp], [b.id], [b.airline], [b.flt_num], [b.sch_dep_dt_utc],
[b.sch_arv_dt_utc], [b.flight_flag]), filter(nil), rowset=256
 22 - output([b.interface_flt_id], [b.flt_dt], [b.fleet], [b.register], [b.dep_arp], [b.arv_arp], [b.id], [b.airline], [b.flt_num], [b.sch_dep_dt_utc],
[b.sch_arv_dt_utc], [b.flight_flag]), filter(nil), rowset=256
      is_single, dop=1
 23 - output([b.id], [b.interface_flt_id], [b.flt_dt], [b.airline], [b.flt_num], [b.fleet], [b.register], [b.sch_dep_dt_utc], [b.sch_arv_dt_utc], [b.dep_arp],
[b.arv_arp], [b.flight_flag]), filter(nil), rowset=256
      access([b.id], [b.interface_flt_id], [b.flt_dt], [b.airline], [b.flt_num], [b.fleet], [b.register], [b.sch_dep_dt_utc], [b.sch_arv_dt_utc], [b.dep_arp],
[b.arv_arp], [b.flight_flag]), partitions(p0)
      is_index_back=false, is_global_index=false, 
      range_key([b.id]), range(MIN ; MAX)always true
 24 - output([a.id], [a.pairing_id], [a.duty_id], [a.crew_id], [c.passport_last_name], [c.passport_first_name], [c.employee_no], [a.position], [d.description],
[a.acting_rank], [e.description], [c.tel], [a.seq_order], [c.nationality], [a.check_type], [a.ts_flag], [a.division], [c.last_name], [c.first_name], [c.gender],
[t1.start_utc], [t1.end_utc], [a.flt_id], [a.assignment]), filter(nil), rowset=256
      equal_conds([a.acting_rank = e.rank]), other_conds(nil)
 25 - output([e.description], [e.rank]), filter(nil), rowset=256
 26 - output([e.description], [e.rank]), filter(nil), rowset=256
      is_single, dop=1
 27 - output([e.rank], [e.description]), filter(nil), rowset=256
      access([e.rank], [e.description]), partitions(p0)
      is_index_back=false, is_global_index=false, 
      range_key([e.id]), range(MIN ; MAX)always true
 28 - output([a.id], [a.pairing_id], [a.duty_id], [a.crew_id], [c.passport_last_name], [c.passport_first_name], [c.employee_no], [a.position], [d.description],
[a.acting_rank], [c.tel], [a.seq_order], [c.nationality], [a.check_type], [a.ts_flag], [a.division], [c.last_name], [c.first_name], [c.gender], [t1.start_utc],
[t1.end_utc], [a.flt_id], [a.assignment]), filter(nil), rowset=256
      equal_conds([a.position = d.position]), other_conds(nil)
 29 - output([d.position], [d.description]), filter(nil), rowset=256
      access([d.position], [d.description]), partitions(p0)
      is_index_back=false, is_global_index=false, 
      range_key([d.id]), range(MIN ; MAX)always true
 30 - output([a.id], [a.pairing_id], [a.duty_id], [a.crew_id], [c.passport_last_name], [c.passport_first_name], [c.employee_no], [a.position], [a.acting_rank],
[c.tel], [a.seq_order], [c.nationality], [a.check_type], [a.ts_flag], [a.division], [c.last_name], [c.first_name], [c.gender], [t1.start_utc], [t1.end_utc],
[a.flt_id], [a.assignment]), filter(nil), rowset=256
      equal_conds([a.crew_id = c.crew_id]), other_conds(nil)
 31 - output([c.crew_id], [c.last_name], [c.first_name], [c.passport_last_name], [c.passport_first_name], [c.employee_no], [c.gender], [c.tel], [c.nationality]),
filter(nil), rowset=256
      access([c.crew_id], [c.last_name], [c.first_name], [c.passport_last_name], [c.passport_first_name], [c.employee_no], [c.gender], [c.tel], [c.nationality]),
partitions(p0)
      is_index_back=false, is_global_index=false, 
      range_key([c.crew_id]), range(MIN ; MAX)always true
 32 - output([a.id], [a.pairing_id], [a.duty_id], [a.crew_id], [a.position], [a.acting_rank], [a.seq_order], [a.check_type], [a.ts_flag], [a.division],
[t1.start_utc], [t1.end_utc], [a.flt_id], [a.assignment]), filter(nil), rowset=256
      equal_conds([t1.duty_id = a.duty_id]), other_conds(nil)
 33 - output([t1.duty_id], [t1.start_utc], [t1.end_utc]), filter(nil), rowset=256
 34 - output([t1.duty_id], [t1.start_utc], [t1.end_utc]), filter(nil), rowset=256
      is_single, dop=1
 35 - output([t1.duty_id], [t1.start_utc], [t1.end_utc]), filter(nil), rowset=256
      access([t1.duty_id], [t1.start_utc], [t1.end_utc])
 36 - output([UNION([1])], [UNION([2])], [UNION([3])]), filter(nil), rowset=256
 37 - output([t1.duty_id], [t1.start_utc], [t1.end_utc]), filter([t1.node = 'BRIEF']), rowset=256
      access([t1.id], [t1.node], [t1.duty_id], [t1.start_utc], [t1.end_utc]), partitions(p0)
      is_index_back=true, is_global_index=false, filter_before_indexback[false], 
      range_key([t1.__substr256_21], [t1.id]), range(MIN,MIN ; MAX,MAX)always true
 38 - output([t1.duty_id], [t1.start_utc], [t1.end_utc]), filter([t1.node = 'DEBRIEF']), rowset=256
      access([t1.id], [t1.node], [t1.duty_id], [t1.start_utc], [t1.end_utc]), partitions(p0)
      is_index_back=true, is_global_index=false, filter_before_indexback[false], 
      range_key([t1.__substr256_21], [t1.id]), range(MIN,MIN ; MAX,MAX)always true
 39 - output([a.id], [a.crew_id], [a.acting_rank], [a.position], [a.flt_id], [a.pairing_id], [a.duty_id], [a.assignment], [a.seq_order], [a.check_type],
[a.ts_flag], [a.division]), filter(nil), rowset=256
      access([a.id], [a.crew_id], [a.acting_rank], [a.position], [a.flt_id], [a.pairing_id], [a.duty_id], [a.assignment], [a.seq_order], [a.check_type],
[a.ts_flag], [a.division]), partitions(p0)
      is_index_back=false, is_global_index=false, 
      range_key([a.id]), range(MIN ; MAX)always true

【附件】