|
Archives of the TeradataForumMessage Posted: Thu, 24 Aug 2006 @ 17:12:05 GMT
Hi again guys, Hopefully this clarifies what we used to do and what I'd proposed : Firstly, the (part) definition of the target and work table: CREATE MULTISET TABLE DEVCMNCUST_T.CUSTOMER ,NO FALLBACK , NO BEFORE JOURNAL, NO AFTER JOURNAL, CHECKSUM = DEFAULT ( CUS_ID DECIMAL(10,0) NOT NULL, CUS_DELETE_CD CHAR(1) CHARACTER SET UNICODE NOT CASESPECIFIC NOT NULL, CUS_UPDT_TD TIMESTAMP(0) NOT NULL, CUS_UPDT_USER_ID CHAR(8) CHARACTER SET UNICODE NOT CASESPECIFIC NOT NULL, CUS_SOFTLOCK_TS TIMESTAMP(0) NOT NULL, COU_ISO_ID CHAR(2) CHARACTER SET UNICODE NOT CASESPECIFIC NOT NULL, . . . CUS_PRIMARY_SIC_CD CHAR(4) CHARACTER SET UNICODE NOT CASESPECIFIC NOT NULL) UNIQUE PRIMARY INDEX CUSTOMER_UPI ( CUS_ID ); /**/ CREATE MULTISET TABLE CUSTOMER_W02 ,NO FALLBACK , NO BEFORE JOURNAL, NO AFTER JOURNAL, DATABLOCKSIZE = 130560 BYTES, CHECKSUM = DEFAULT ( CUS_ID DECIMAL(10,0) NOT NULL, CUS_DELETE_CD CHAR(1) CHARACTER SET UNICODE NOT CASESPECIFIC NOT NULL, CUS_UPDT_TD TIMESTAMP(0) NOT NULL, CUS_UPDT_USER_ID CHAR(8) CHARACTER SET UNICODE NOT CASESPECIFIC NOT NULL, CUS_SOFTLOCK_TS TIMESTAMP(0), COU_ISO_ID CHAR(2) CHARACTER SET UNICODE NOT CASESPECIFIC NOT NULL, . . . CUS_PRIMARY_SIC_CD CHAR(4) CHARACTER SET UNICODE NOT CASESPECIFIC NOT NULL) UNIQUE PRIMARY INDEX CUSTOMER_UPI ( CUS_ID ); As you'll see, they have the same PI. /* OLD PROCESS : 1.a Delete entries from Target based on all rows in Work */ DEL FROM DEVCMNCUST_T.CUSTOMER A2 WHERE EXISTS (SELECT 1 FROM CUSTOMER_W02 B2 WHERE A2.CUS_ID= B2.CUS_ID) ; (Deletes 5000 rows) 1.b subsequent Insert : contains 'updates' and new rows */ INS INTO DEVCMNCUST_T.CUSTOMER SEL * FROM CUSTOMER_W02; (Inserts 10000 rows) /* NEW PROCESS */ /* 2.a Update followed by subsequent Insert */ UPDATE DEVCMNCUST_T.CUSTOMER TGT1 SET CUS_DELETE_CD=CUSTOMER_W02.CUS_DELETE_CD ,CUS_UPDT_TD=CUSTOMER_W02.CUS_UPDT_TD ,CUS_UPDT_USER_ID=CUSTOMER_W02.CUS_UPDT_USER_ID ,CUS_SOFTLOCK_TS=CUSTOMER_W02.CUS_SOFTLOCK_TS ,COU_ISO_ID=CUSTOMER_W02.COU_ISO_ID . 60 other columns . ,CUS_PRIMARY_SIC_CD=CUSTOMER_W02.CUS_PRIMARY_SIC_CD WHERE TGT1.CUS_ID= CUSTOMER_W02.CUS_ID ; As you'll see, I'm not updating the Primary index column (although I have to confess I did trip up on that one in the early stages). (Updates 5000 rows) /* 2b. Insert new rows */ INSERT INTO DEVCMNCUST_T.CUSTOMER (CUS_ID ,CUS_DELETE_CD ,CUS_UPDT_TD ,CUS_UPDT_USER_ID ,CUS_SOFTLOCK_TS . . . ,CUS_PRIMARY_SIC_CD ) SELECT CUS_ID ,CUS_DELETE_CD ,CUS_UPDT_TD ,CUS_UPDT_USER_ID ,CUS_SOFTLOCK_TS ,COU_ISO_ID . . . ,CUS_PRIMARY_SIC_CD FROM CUSTOMER_W02 WRK2 WHERE NOT EXISTS (SELECT 1 FROM DEVCMNCUST_T.CUSTOMER TGT1 WHERE TGT1.CUS_ID= WRK2.CUS_ID ) ; (Inserts 5000 rows) I'm hoping I've done something which is considered to be a complete 'no, no', but I don't think so. Yes, the figures I gave are averages (but not on many runs) and the box was pretty idle at the time. It's true that I'm not running it as a Multi-statement Request. Would that make a big difference ? (I could try it). Hope that helps your ponderings. Gratefully yours, Dave Clough
| ||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||
Copyright 2016 - All Rights Reserved | ||||||||||||||||||||||||||||||||||||||||||||||||
Last Modified: 15 Jun 2023 | ||||||||||||||||||||||||||||||||||||||||||||||||