대량 테이블 경량화
[중요. 1] SET IDENTITY_INSERT [DBO].[TABLE_1_NEW] ON; --중요 쿼리 ID값을 넣을 수 있게 설정 [중요. 2] SP_RENAME 'TABLE_1' , 'TABLE_2' GO SP_RENAME 'TABLE_1_NEW' , 'TABLE_1' GO [예제 시작] --SET IDENTITY_INSERT 옵션의 예제 --SET IDENTITY_INSERT [DBO].[TABLE_1_NEW] ON; --중요 쿼리 ID값을 넣을 수 있게 설정 USE [WSJTESTDB] --TEST 디비 GO --테이블 1 생성 CREATE TABLE [DBO].[TABLE_1]( [C1] [NCHAR](10) NULL, [AMT] [DECIMAL](12, 0) NULL, [S1] [DECIMAL](20, 0) IDENTITY(1,1) NOT NULL ) ON [PRIMARY] GO --테이블 2 생성 -기본키도 잡아준다. CREATE TABLE [DBO].[TABLE_1_NEW]( [C1] [NCHAR](10) NOT NULL, [AMT] [DECIMAL](12, 0) NULL, [S1] [DECIMAL](20, 0) IDENTITY(1,1) NOT NULL, CONSTRAINT [PK_TABLE_1_NEW] PRIMARY KEY CLUSTERED ( [C1] ASC, [S1] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO --샘플 데이터 생성 INSERT INTO [DBO].[TABLE_1]([C1],[AMT]) VALUES ('A',10); INSERT INTO [DBO].[TABLE_1]([C1],[AMT]) VALUES ('A',10); GO --중요 설정 값 활성화 SET IDENTITY_INSERT [DBO].[TABLE_1_NEW] ON; --중요 쿼리 ID값을 넣을 수 있게 설정 --테이블 이관 작업 INSERT [DBO].[TABLE_1_NEW] (C1, AMT, S1) SELECT [C1],[AMT],[S1] FROM [DBO].[TABLE_1] GO SET IDENTITY_INSERT [DBO].[TABLE_1_NEW] ON; --중요 쿼리 INSERT INTO [DBO].[TABLE_1]([C1],[AMT],[S1]) VALUES ('A',10, 3); SET IDENTITY_INSERT [DBO].[TABLE_1_NEW] OFF; --중요 쿼리 설정 중지(작업 완료 후) INSERT INTO [DBO].[TABLE_1_NEW]([C1],[AMT]) VALUES ('XX' ,9999999) GO SET IDENTITY_INSERT [DBO].[TABLE_1_NEW] ON; --중요 쿼리 --없는 데이틀 이관한다.--대략 6개월치 INSERT [DBO].[TABLE_1_NEW] (C1, AMT, S1) SELECT A.[C1], A.[AMT], A.[S1] FROM [DBO].[TABLE_1] A LEFT JOIN [DBO].[TABLE_1_NEW] B ON A.S1 = B.S1 --AND A.C1 = B.C1 -- 상황에 맞게 ON절 조절 WHERE B.S1 IS NULL GO /* TEST 쿼리 SELECT [C1],[AMT],[S1] FROM [DBO].[TABLE_1_NEW] SELECT [C1],[AMT],[S1] FROM [DBO].[TABLE_1] TRUNCATE TABLE [TABLE_1] TRUNCATE TABLE [TABLE_1_NEW] */ SP_RENAME 'TABLE_1' , 'TABLE_2' SP_RENAME 'TABLE_1_NEW' , 'TABLE_1' --실패 했을 경우 다시 리네임 |
댓글
댓글 쓰기