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 6841 게시물 읽기
No. 6841
안녕하세요 쿼리에 대해 질문 드립니다.
작성자
투루로맨스(jung1873)
작성일
2014-08-14 14:27
조회수
6,548

안녕하세요

 

 

 

질문 드릴내용은

 

 

 

한테이블의 데이터가 700만건 정도 되는데

 

 

 

1000건씩

 

 

 

여기있는 데이터를 다른 테이블로 옮길려고 합니다.

 

 

 

DB 쿼리분석기가 아니라 프로그램 상으로 옮길려고 합니다.

 

 

 

SELECT TOP 1000 컬럼1,컬럼2

 

FROM 테이블 WHERE 키 not in (SELECT 컬럼1 FROM 옮길테이블)

 

에서 루프를 돌리죠

 

 

 

for 를 갯수만큼 돌려서

 

갯수만큼 다른 옮길테이블에 인서트를시키는 겁니다

 

for(int i = 0 ; i < list.size() ; i++){

 

가져오는 데이터를 다른 테이블에 인서트

 

INSERT INTO 옮길테이블

 

VALUES(루프 돌려서 값셋팅)

 

}

 

 

 

문제는 인서트 자체가 너무 느립니다.

 

 

 

혹시 락이 걸려서 그런걸까요?

 

 

 

방법이 없을까요??

 

 

 

SELECT TOP 1000 컬럼1,컬럼2

 

FROM 테이블 WHERE 키 not in (SELECT 컬럼1 FROM 옮길테이블)

 

여기서 with nolock을 쓰면 혹시 빠를까요??

 

 

 

테이블의 데이터는 700만건에서 ~ 1000만건 됩니다.

 

 

 

답변 부탁드립니다.

 

 

 

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

다른 것을 다 제쳐두고라도 NOT IN 을 사용하시면 느려지는 것은 불보듯 뻔한 일이지요.

예를 들어 IDENTITY가 설정된 PK가 id라는 컬럼이 있다면

SELECT ~~
FROM ~~
WHERE 0 < id AND id <= 1000

식으로 select를 하시면 DB에서 뽑아내시는 속도는 확실히 개선되실 거라고 믿습니다.

우욱님이 2014-08-14 15:58에 작성한 댓글입니다. Edit

그런데 당최 왜(!) 프로그램으로 하시는거죠? -_-;;

SSIS를 사용하시는 편이 왕 쉽고 빠를거 같은데 말이죠...

 

 

설사 뭐 여타 다른 이유가 있다손 치더라도

BEGIN TRAN

FOR 뺑뺑이로 INSERT

COMMIT

를 해주시면 insert 속도도 개선이 될 거 같아서 한 말씀 더 올립니다.

우욱님이 2014-08-14 16:01에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
684450 단위로 맞추기 [5]
김우성
2014-08-31
6336
6843성능모니터
아이들
2014-08-26
5762
6842select 후 값이 있으면 update 없으면 insert 에 대한 문의드립니다.
다키짱
2014-08-22
7215
6841안녕하세요 쿼리에 대해 질문 드립니다. [2]
투루로맨스
2014-08-14
6548
6840쿼리 질문입니다. [10]
둥둥이
2014-08-08
6739
6839시퀀스 증가 질문이요 [1]
으아~~
2014-08-08
6096
6838fn_varbintohexstr로 암호화하기 [6]
선이
2014-08-01
9242
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.047초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다