2013-10-03 33 views
1

以下Teradata查詢大約需要18秒才能完成。 在IN子句中傳遞的突出顯示的值來自另一個Oracle數據庫,所以我無法實現與該表的聯接。針對IN的SQL調整子句

SELECT distinct sec.SerialNum esn, ef.EngineFamilyCd family, em.EngineModelCd model, 
es.EngineSeriesCd series, sac.AircraftTailNum tailNumRef, sec.EnginePositionNum enginePosition, 
o1.OrganizationId ownerOrgId, o2.OrganizationId operatorOrgId, 
sec.EngineInstallationDttm installedDate, sec.EngineRemovalDttm removalDate, 
sec.HardwareConfigNm hardwareConfig, sec.EngineControlNm engineControl, 
sec.ApplicationSelectorNm appSelector, sec.EngineMonitorInd engineMonitorInd, 
sec.EngineThrustRatingFctr engineThrustRating, sec.StatusDesc engineStatus, sec.n1modifiernum n1modifier 
FROM DB_MASTER_BV.SZEngineCurrent sec, 
DB_MASTER_BV.EngineSeries es, 
DB_MASTER_BV.EngineModel em, 
DB_Master_BV.EngineFamily ef, 
DB_MASTER_BV.SZAircraftCurrent sac, 
DB_MASTER_BV.Organization o1, 
DB_MASTER_BV.Organization o2 
WHERE sec.EngineSeriesCd = es.EngineSeriesCd 
and es.EngineModelCd = em.EngineModelCd 
and em.EngineFamilyCd = ef.EngineFamilyCd 
and sec.MasterAircraftId = sac.MasterAircraftId 
and o1.MasterOrganizationId = sec.OwnerMasterOrganizationId 
and o2.MasterOrganizationId = sec.OperatorMasterOrganizationId 
AND (sec.SerialNum in('733276','193283','690168','741471','876374','873383','193386','906397','804314','900116','785670','900399','724321','193488','811373','779917','193699','994688', 
'779410','575169','A59299','900206','193297','575484','896359','367230','810105','876485','906385','876484','707149','811222','706801','193596','731949','697881', 
'889697','804626','575194','707159','706129','900230','900231','706834','811352','900229','785748','193460','888221','906272','906266','906264','906263','994356', 
'194431','731966','892417','811341','577413','741572','575564','889262','706956','876157','900257','900153','706958','706957','960436','892429','892427','900354', 
'697138','645655','193352','994337','707189','697833','959190','900246','811317','577437','193643','697976','890692','193229','965579','900137','900135','894897', 
'697723','193363','193367','785505','907077','959184','811311','706526','577302','706529','994332','702792','706663','779834','731931','960127','193371','876183', 
'741563','193235','803843','577320','994318','907087','741460','907086','959170','994462','900464','193626','877503','643711','811202','811201','704585','193504', 
'193500','875246','704876','725834','699783','699780','802380','900304','706885','906191','577773','959152','872574','811435','697388','699381','892485','577698', 
'907035','811445','907039','894999','894857','894595','697273','894597','959139','577894','874898','706959','900424','193337','577697','907011','875696','699555', 
'699554','575629','906149','906150','193452','962968','811264','811266','962970','875395','699543','575638','906153','857962','896247','858349','779746','906161', 
'906928','802857','779640','193424','550309','424520','550305','575608','872517','906169','892196','811386','811385','906173','907220','959234','876666','959231', 
'876662','893785','875914','802649','550218','550315','906111','741984','550319','906405','906501','550118','643371','785254','550116','550117','802946','906629', 
'907145','550325','550324','906837','550320','906838','702591','550220','550227','906415','690289','906517','704416','731431','550125','959201','906413','994176', 
'550333','550140','550337','891651','550141','550338','906746','907269','550132','550137','550138','892914','550342','906123','550153','550345','950923','906129', 
'873188','906850','906953','690270','890713','645352','893127','697590','874826','424439','893126','907110','550144','856305','690269','892824','550256','550257', 
'906867','907186','960852','720754','960851','906866','888607','805573','811530','960756','872352','550266','550267','550264','811518','888896','906730','994958', 
'892247','960970','875186','906987','424124','550232','A59303','702660','875885','811609','888626','424219','906897','994981','731502','697496','695345','962996', 
'894371','907153','805541','907154','424337','906613','906615','900512','906610','956141','994611','804582','994718','888648','575219','888756','896973','424395', 
'872117','A59227','697616','731380','697614','900161','690410','994213','956155','956154','779492','994231','702876','577248','994727','193818','890879','722243', 
'906499','577354','888560','645121','896972','960823','804279','900175','888853','193724','550285','550282','906469','994803','906466','888299','877141','890984', 
'695688','994533','888327','A59348','A59346','994410','733116','550296','550290','550292','906478','731763','725658','896408','645145','994751','731654','740358', 
'906441','550158','193849','906543','906448','994262','575824','424186','906345','643663','888305','906243','906244','702963','906453','906452','956119','906451', 
'956116','950489','550166','906454','367457','896764','575833','994268','906252','994127','733236','906258','956123','550178','994777','956126','956127','956128', 
'906786','906788','906687','643290','994631','956225','994632','888574','906365','804228','731599','643682','550182','804369','994784','550186','550183','888826', 
'575127','906439','890482','906438','906691','890472','994509','193147','575718','804215','575276','994793','897257')) 
and END(sec.EngineValidPd) is until_changed 
order by esn 

此外,如果有超過1000條記錄,我在執行IN子句如下 AND(sec.SerialNum在(999個recods)OR sec.SerialNum在(未來999個recods)......或者秒。 SERIALNUM在(剩餘recods)) 請提出解決方案,它會比上面的查詢速度更快,這將不會在IN子句

+4

如果你能產生像查詢上面,從Oracle數據庫中的數據中,爲什麼不將SerialNum放入Teradata數據庫的臨時表中,然後使用針對臨時表的連接執行查詢? – Dan

+0

這種方法不可擴展,最終會導致問題。我同意Dan的意見,你應該將這些值加載到Teradata的臨時表中。 –

回答

1

什麼是您的Teradata發行導致超過1000條記錄的問題?

在TD14有一個內置表功能分割的字符串值,你可以簡單地傳遞一個字符串中的所有值:

AND sec.SerialNum IN 
(
    SELECT token 
    FROM TABLE (STRTOK_SPLIT_TO_TABLE(1, '733276,193283,690168,741471,876374', ',') 
     RETURNS (outkey INTEGER, 
       tokennum INTEGER, 
       token VARCHAR(20) CHARACTER SET UNICODE) 
      ) AS d 
)