database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 4255 게시물 읽기
No. 4255
커서를 이용해서 여러테이블에 있는 데이터 백업
작성자
초보입니다.
작성일
2008-06-02 16:49
조회수
4,273

안녕하세요

MS-SQL 초보 개발자입니다.
나라가 어지럽고 -_-;) 날씨가 많이 무더워져서 개발하는데 고생하십니다.

커서를 이용해서 여러 테이블에 있는 데이터를 하나에 테이블에 백업하려고하는데 속도가 안나와서 문의드립니다.


---------------------  쿼리 문 ---------------------

INSERT INTO 백업테이블_0514

     SELECT 컬럼A, 컬럼B, 컬럼C, 컬럼D, 컬럼E, 컬럼F, 컬럼G, 컬럼H, 컬럼I,  -- A테이블
                  컬럼J, 컬럼K, 컬럼L, 컬럼M, 컬럼N, 컬럼O, 컬럼P, 컬럼Q, 컬럼R, 컬럼S  -- B테이블

     FROM 테이블A A

     LEFT OUTER JOIN
     (
           SELECT 컬럼J, 컬럼K, 컬럼L, 컬럼M, 컬럼N, 컬럼O, 컬럼P, 컬럼Q, 컬럼R, 컬럼S
           FROM 테이블B WITH (NOLOCK)
           WHERE 컬럼J = 'AAA'
               AND 컬럼K >= CAST('2008-06-02 10:18:00' AS DATETIME)
      ) O

     ON (컬럼A + 컬럼B + CAST(컬럼C AS VARCHAR)) = 컬럼L+ SUBSTRING(컬럼M,2,4)+SUBSTRING(컬럼N,8,7)+CAST(컬럼O AS VARCHAR)

     WHERE 컬럼C = 'CCC' 
           AND 컬럼D < 1000
           AND 컬럼E >= CAST('2008-06-02 10:18:00' AS DATETIME)
           AND 컬럼E < CAST('2008-06-02 20:18:00' AS DATETIME)

--  테이블A 데이터개수 : 약 20만개
--  테이블B 데이터개수 : 약 6천개

--  B테이블에 있는 데이터가 A테이블에도 있으면 백업 테이블에 INSERT (B테이블 약 400개)
--  조인해서 백업테이블에 넣어지는 데이터개수 : 약 500개

------------------------------------------------------

위와같은 쿼리를 커서를 사용해서 약 400개의 테이블의 데이터를 백업테이블에 모아 두는 SP를 만드는데요.

400번을 돌아가서 백업 테입블에 INSERT 되는 시간이 대략 3분 정도 소요됩니다. (20초 안으로 속도 개선해아함 ㅜㅜ)

인덱스문제인지? 쿼리 방법이 틀린건지? 커서를 사용하면 안되는건지? 다른 방법이 있는지?

바쁘시지만 고수님의 조언 부탁드립니다.  _ _)


 
이 글에 대한 댓글이 총 2건 있습니다.

Cursor의 과정으로 하면 안됩니다. 1 ~ 400개 까지면 

당연히 400번째로 실행되는 테이블은 400번째 실행되겠죠. 


두어가지 방법을 제시하고 싶습니다. 

1. DTS를 이용하는 방식 

2. 프로그램 등으로 Thread를 구현하는 방식 

3. 동적 SQL을 하신 다음 osql을 이용해서 그냥 강제적으로 thread를 구현하시는 것


아마도 index 베이스가 되어 있다면 

해결되지 않을까 싶습니다.

.님이 2008-06-02 18:26에 작성한 댓글입니다. Edit

황금같은 가르침 감사합니다. 말씀하신걸 토대로 변경해보도록 하겠습니다.

초보입니다.님이 2008-06-03 09:10에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
4258쿼리튜닝 질문 [1]
유재혁
2008-06-05
4520
4257pivot 질문....
sourface
2008-06-04
3984
4256inner join [1]
초보
2008-06-03
3773
4255커서를 이용해서 여러테이블에 있는 데이터 백업 [2]
초보입니다.
2008-06-02
4273
4242ms_sql쿼리 질문입니다. [2]
빙승재
2008-05-30
4252
4241커서 질문.. [2]
커서초보
2008-05-30
4576
4240셀렉트와 인서트를 한번에 처리.. [1]
손님
2008-05-29
4514
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다