【 使用环境 】生产环境
【 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
【附件】