|
Archives of the TeradataForumMessage Posted: Tue, 16 Jun 2015 @ 13:23:34 GMT
<-- Anonymously Posted: Tuesday, June 16, 2015 08:17 --> Hi, This query joins a 63m row to a 61m row table. The estimate says 1min 35 secs , the actual runtime is 46mins. I have tried partitioning on the Sys_reporting.bk03_ev table on column domain_id, and changing the indexes of Sys_Reporting.bk03_ev to edw_keyand creating a join index but with no improvement. DDL and details attached. CREATE SET TABLE sys_reporting.bk03_ev ,NO FALLBACK , NO BEFORE JOURNAL, NO AFTER JOURNAL, CHECKSUM = DEFAULT, DEFAULT MERGEBLOCKRATIO ( SOURCE_KEY VARCHAR(64) CHARACTER SET LATIN NOT CASESPECIFIC NOT NULL, DOMAIN_ID BYTEINT NOT NULL, KEY_SET_ID SMALLINT NOT NULL, EDW_KEY BIGINT NOT NULL, START_DATE DATE FORMAT 'YYYY-MM-DD' NOT NULL, END_DATE DATE FORMAT 'YYYY-MM-DD' NOT NULL DEFAULT DATE '9998-12-31' COMPRESS (DATE '9998-12-31'), RECORD_DELETED_FLAG BYTEINT NOT NULL DEFAULT 0 COMPRESS (0 ,1 ), CTL_ID SMALLINT NOT NULL, PROCESS_NAME VARCHAR(30) CHARACTER SET LATIN NOT CASESPECIFIC NOT NULL, PROCESS_ID INTEGER NOT NULL, UPDATE_PROCESS_NAME VARCHAR(30) CHARACTER SET LATIN NOT CASESPECIFIC COMPRESS , UPDATE_PROCESS_ID INTEGER COMPRESS ) PRIMARY INDEX (SOURCE_KEY); CREATE MULTISET TABLE sys_reporting.st_TRML_DAILY_PRINCIPAL ,NO FALLBACK , NO BEFORE JOURNAL, NO AFTER JOURNAL, CHECKSUM = DEFAULT, DEFAULT MERGEBLOCKRATIO ( SOURCE_KEY VARCHAR(64) CHARACTER SET LATIN NOT CASESPECIFIC NOT NULL, BALANCE VARCHAR(64) CHARACTER SET LATIN NOT CASESPECIFIC, AMOUNT VARCHAR(64) CHARACTER SET LATIN NOT CASESPECIFIC, POST_DATE VARCHAR(64) CHARACTER SET LATIN NOT CASESPECIFIC, VALUE_DATE VARCHAR(64) CHARACTER SET LATIN NOT CASESPECIFIC, TRANSACTION_TYPE VARCHAR(64) CHARACTER SET UNICODE CASESPECIFIC, SOURCE_CODE VARCHAR(64) CHARACTER SET LATIN NOT CASESPECIFIC, REAL_OR_NOTIONAL_FLAG VARCHAR(64) CHARACTER SET UNICODE CASESPECIFIC, TCT_ID VARCHAR(64) CHARACTER SET LATIN NOT CASESPECIFIC, CCY_ID VARCHAR(64) CHARACTER SET UNICODE CASESPECIFIC, NOMINAL_INCREASE VARCHAR(64) CHARACTER SET LATIN NOT CASESPECIFIC, NOMINAL_DECREASE VARCHAR(64) CHARACTER SET LATIN NOT CASESPECIFIC, AMORT_AMOUNT VARCHAR(64) CHARACTER SET LATIN NOT CASESPECIFIC, RPL VARCHAR(64) CHARACTER SET LATIN NOT CASESPECIFIC, SETTLEMENT_DATE VARCHAR(64) CHARACTER SET UNICODE CASESPECIFIC, EXCHANGE_RATE VARCHAR(64) CHARACTER SET LATIN NOT CASESPECIFIC, POSTING_COUNT VARCHAR(64) CHARACTER SET UNICODE CASESPECIFIC, START_DATE DATE FORMAT 'YYYY-MM-DD' NOT NULL, END_DATE DATE FORMAT 'YYYY-MM-DD' COMPRESS , RECORD_DELETED_FLAG BYTEINT COMPRESS , CTL_ID SMALLINT NOT NULL COMPRESS 12 , FILE_ID SMALLINT NOT NULL COMPRESS 5 , PROCESS_NAME CHAR(30) CHARACTER SET LATIN CASESPECIFIC NOT NULL COMPRESS 'LD120005_01_ST_TRML_DAILY_PR ', PROCESS_ID INTEGER NOT NULL, UPDATE_PROCESS_NAME CHAR(30) CHARACTER SET LATIN CASESPECIFIC COMPRESS , UPDATE_PROCESS_ID INTEGER COMPRESS , START_TS TIMESTAMP(6) COMPRESS , END_TS TIMESTAMP(6) COMPRESS ) PRIMARY INDEX ( SOURCE_KEY ); explain SELECT K289502.EDW_KEY as EV_ID ,CASE WHEN SYSLIB.GCFRCheckDecimal16(BALANCE,20,2) = 1 THEN CAST(BALANCE as number(20,2)) END as BALANCE ,CASE WHEN SYSLIB.GCFRCheckDecimal16(AMOUNT,20,2) = 1 THEN CAST(AMOUNT as number(20,2)) END as AMOUNT ,SYSLIB.DATE_OR_NULL(SUBSTRING(POST_DATE FROM 1 FOR 10),'yyyy-mm-dd') as POST_DATE ,SYSLIB.DATE_OR_NULL(SUBSTRING(VALUE_DATE FROM 1 FOR 10),'yyyy-mm-dd') as VALUE_DATE ,TRANSACTION_TYPE ,SOURCE_CODE ,REAL_OR_NOTIONAL_FLAG ,TCT_ID ,CCY_ID ,CASE WHEN SYSLIB.GCFRCheckDecimal16(NOMINAL_INCREASE,20,2) = 1 THEN CAST(NOMINAL_INCREASE as number(20,2)) END as NOMINAL_INCREASE ,CASE WHEN SYSLIB.GCFRCheckDecimal16(NOMINAL_DECREASE,20,2) = 1 THEN CAST(NOMINAL_DECREASE as number(20,2)) END as NOMINAL_DECREASE ,CASE WHEN SYSLIB.GCFRCheckDecimal16(AMORT_AMOUNT,20,2) = 1 THEN CAST(AMORT_AMOUNT as number(20,2)) END as AMORT_AMOUNT ,CASE WHEN SYSLIB.GCFRCheckDecimal8(RPL,18,2) = 1 THEN CAST(RPL as number(18,2)) END as RPL ,SYSLIB.DATE_OR_NULL(SUBSTRING(SETTLEMENT_DATE FROM 1 FOR 10),'yyyy-mm-dd') as SETTLEMENT_DATE ,CASE WHEN SYSLIB.GCFRCheckDecimal8(EXCHANGE_RATE,18,8) = 1 THEN CAST(EXCHANGE_RATE as number(18,8)) END as EXCHANGE_RATE ,POSTING_COUNT FROM sys_reporting.ST_TRML_DAILY_PRINCIPAL a JOIN sys_reporting.BK03_EV K289502 ON a.source_key = K289502.SOURCE_KEY and K289502.DOMAIN_ID =12;
Stats for Sys_reporting.bk03_ev 15/06/16 09:44:18 61,284,375 * * "*" ? 15/06/16 09:43:14 42,781,469 SOURCE_KEY,DOMAIN_ID SOURCE_KEY,DOMAIN_ID SOURCE_KEY,DOMAIN_ID ? 15/06/16 09:43:44 61,284,375 EDW_KEY EDW_KEY EDW_KEY ? 15/06/16 09:44:16 61,284,375 SOURCE_KEY SOURCE_KEY SOURCE_KEY ? 15/06/16 09:44:18 6 DOMAIN_ID DOMAIN_ID DOMAIN_ID ? Stats for Sys_Reporting.ST_TRML_DAILY_PRINCIPAL 15/06/16 09:46:26 63,173,410 * * "*" ? 15/06/16 09:46:26 63,173,410 SOURCE_KEY SOURCE_KEY SOURCE_KEY ? example of source_key :- 10004767^2011-03-09 00:00:00.000000^14222954 create join index sys_reporting.ST_TRML_DAILY_PRINCIPAL_12_JI as select a.edw_key, b.source_key, b.rowid, a.domain_id from sys_reporting.bk03_ev a join sys_reporting.st_TRML_DAILY_PRINCIPAL b on a.source_key = b.source_key and domain_id = 12 primary index(edw_key); I forgot to mention , we run a 1 node, 23 AMP, 670c on V14.10 The source_key is unique on both tables and the edw_key is unique on the Sys_Reporting.bk03_ev table.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Copyright 2016 - All Rights Reserved | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Last Modified: 15 Jun 2023 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||