1. 인덱스 유지 비용
2. Insert 튜닝
3. Update 튜닝
alter database SQLPRO set recovery SIMPLE
BULK INSERT AdventureWorks.Sales.SalesOrderDetail
FROM 'C:₩orders₩Iineitem.txt'
WITH
(
DATAFILETYPE = 'CHAR',
FIELDTERMINATOR = ' |',
ROWTERMINATOR = ' |\n',
TABLOCK
)
SELECT *
INTO TARGET
FROM SOURCE;
insert into t_heap with (TABLOCk) select * from t_source
UPDATE 주문
SET 상태코드 = '9999'
WHERE 주문일시 < TO_DATE('20000101', 'yyyymmdd')
;
-- Oracle
CREATE TABLE 주문_임시 AS
SELECT *
FROM 주문
;
-- SQL Server
SELECT *
INTO #EMP_TEMP
FROM EMP
;
ALTER TABLE EMP DROP CONSTRAINT 주문_PK;
DROP INDEX [주문.]주문_idx1;
TRUNCATE TABLE 주문;
INSERT INTO 주문(고객번호, 주문일시, 상태코드)
SELECT 고객변호,
주문일시,
(CASE WHEN 주문일시 > = TO DATE('20000101' 'yyyymmdd') THEN '9999'
ELSE STATUS
END) 상태코드
FROM 주문_임시
;
ALTER TABLE 주문 ADD CONSTRAINT 주문_PK PRIMARY KEY(고객변호, 주문일시) ;
CREATE INDEX 주문_idx1 ON 주문(주문일시, 상태코드);
UPDATE 고객
SET (최종거래일시,
최근거래금액) = (SELECT MAX(거래일시) , SUM(거래금액)
FROM 거래
WHERE 고객번호 = 고객.고객번호
AND 거래일시 > = TRUNC(ADD_MONTHS(SYSDATE, -1)))
WHERE EXISIS (SELECT 'x'
FROM 거래
WHERE 고객번호 = 고객.고객변호
AND 거래일시 > = TRUNC(ADD_MONTHS(SYSDATE, -1)));
UPDATE 고객
SET 최종거래일시 = B 거래일시,
최근거래금액 = B 거래금액
FROM 고객 A INNER JOIN (SELECT 고객변호,
MAX(거래일시) 거래일시,
SUM(거래금액) 거래금액
FROM 거래
WHERE 거래일시 > = DATEADD(MM, -1, CONVERT(DATETIME, CONVERT(CHAR(8), GETDATE(), 112), 112))
GROUP BY 고객 변호
) B
ON A.고객변호 = B.고객변호
UPDATE /*+ BYPASS_UJVC */
(SELECT C.최종거래일시,
C.최근거래금액,
T.거래일시,
T.거래금액
FROM (SELECT 고객번호,
MAX(거래일시) 거래일시,
SUM(거래금액) 거래금액
FROM 거래
WHERE 거래일시 >= TRUNC(ADD_MONTHS(SYSDATE, -1))
GROUP BY 고객번호
) T,
고객 C
WHERE C.고객번호 = T.고객번호
)
SET 최종거래일시 = 거래일시,
최근거래금액 = 거래금액
MERGE INTO 고객 T
USING 고객변경분 S
ON (T.고객변호 = S.고객번호)
WHEN MATCHED THEN
UPDATE
SET T.고객변호 = S.고객번호,
T.고객명 = S.고객명,
T.이메일 = S.이메일
WHEN NOT MATCHED THEN
INSERT (고객번호, 고객명, 이메일, 전화번호, 거주지역, 주소, 등록일시)
VALUES (S.고객변호, S.고객명, S.이메일, S.전화번호, S.거주지역, S.주소, S.등록일시)
;
MERGE INTO 고객 T
USING 고객변경분 S
ON (T.고객번호 = S.고잭변호)
WHEN MATCHED THEN
UPDATE
SET T.고객번호 = S.고객변호,
T.고객명 = S.고객명,
T.이메일 = S.이메일
;
MERGE INTO 고객
USING 고객변경분 S
ON (T.고객번호 = S.고객번호)
WHEN NOT MATCHED THEN
INSERT (고객번호, 고객명, 이메일, 전화번호, 거주지역, 주소, 등록일시)
VALUES (S.고객번호, S.고객명, S.이메일, S.전화번호, S.거주지역, S.주소, S.등록일시)
;
MERGE INTO 고객 C
USING (SELECT 고객변호,
MAX(거래일시) 거래일시,
SUM(거래금액) 거래금액
FROM 거래
WHERE 거래일시 >= TRUNC(ADD_MONTHS(SYSDATE, -1))
GROUP BY 고객변호) T
ON (C.고객번호 = T.고객변호)
WHEN MATCHED THEN
UPDATE
SET C.최종거래일시 = T.거래일시,
C.최근거래금액 = T.거래금액
;