안녕하세요.


100만건의 데이터를 하나씩 가져와 1500건의 자료와 하나씩 비교하며 걸러내는..

중첩된 WHILE문으로 데이터 비교 후 필요한 레코드의 SEQ(고유번호)를 구해서 

별도의 테이블에 등록해 주는 프로시저를 만들었습니다.


100만건 정도의 데이터를 분류하기 위해 만든 것인데요

처음엔 커서의 중첩 사용으로 WHILE문을 돌리는 것으로 처리했습니다.


그런데 속도가 너무 느린 것이었습니다.

인터넷을 찾아보니 커서는 속도의 문제로 권장하지 않으며 테이블 변수를 만들어 해당 데이터를 넣어준 뒤

WHILE문으로 레코드를 하나씩 가져와 처리하라는 내용을 보고 테이블 변수로 바꾸었습니다.


그런데 테이블 변수를 사용해서 돌려도 속도가 크게 개선되는 것 같진 않았습니다.

대충 12시간 넘게 걸리던 작업이 6~7시간 정도로 줄긴 했으나 ...

100만건 데이터를 WHILE문으로 하나씩 가져와서 약 1500개 정도 되는 데이터를 또 다시 WHILE문으로 비교하면서

데이터를 걸러내는 작업 치고는 너무 오랜 시간이 걸리는 것 같다는 생각 이었습니다.


그래서 인터넷을 다시 찾아 봤습니다.

커서에서 선언부에 커서의 옵션으로 FAST_READONLY 또는 STATIC 등의 옵션을 주면

DEFAULT값인 Dynamic보다 빠르다는 내용을 보고

처음엔 FAST_READONLY 적용을 하였으나 커서가 이미 선언 되었다는 에러 메시지가 나와서

STATIC으로 변경했더니 빠르게 수행 되더군요..


작업 시간이 약 1시간 정도로 매우 빨라 졌습니다.


인터넷에 뒤져보면 커서 사용을 자제하고 테이블 변수를 사용하거나 차선책으로 임시 테이블을 쓰라는 내용이 있던데

지금 이렇게 작업을 해놓고 보니 커서에서 옵션만 선언부에 잘 적용 시키면 엄청 빠른 결과를 가져올 수 있었습니다.

제가 테이블 변수를 잘못 사용한 것일까요? 아니면 커서를 사용하는 것이 맞는 것일까요?


왜 사람들은 커서의 사용이 퍼포먼스에 좋지 못하니 사용하지 말라고 할까요?

몇마디 조언 부탁드립니다.


P.S.

제가 만든 프로시저의 내용이나 예상실행계획을 보시고 싶다면 올려드릴 수 있습니다.

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 36169
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 18655
7203 저장프로시정 진행중 메시지 박스 [2] 여행스케치 2013.09.27 4471
7202 MSSQL 에 연결하는 프로그램에서 최적 Connection 개수는 어떻게 판단해야하나요? [2] 고영훈_275947 2013.09.27 6963
7201 rank () 함수로 쿼리 사용중 문제가 있어 질문드립니다. [2] 김락중_278785 2013.09.27 4924
7200 500 Internal Server Error 문제 문의 [1] 비홍 2013.09.27 11679
7199 addlinkedserver 관련 [3] hhhh 2013.09.27 3979
7198 구글 위경도 좌표 테이블에서 거리를 계산하는 MySql쿼리=> MSSql 변환 문의 [3] 자유인s 2013.09.27 19390
7197 connection error [1] 이유진_301818 2013.09.27 3532
» 중첩된 WHILE문 수행 프로시저에서 커서와 테이블 변수 속도 관련 문의 [7] Larry 2013.09.26 11480
7195 작업모니터에서.... 비홍 2013.09.26 4344
7194 시퀀스와 기본키, 유니크 관련문의입니다. [15] 하하하하하 2013.09.26 5379
7193 조인과 서브쿼리 관련 질문입니다. [4] 흑흑 2013.09.26 6256
7192 MSSQL '문자열이나 이진 데이터는 잘립니다.' 오류 문의 [4] rusl 2013.09.26 42795
7191 MSSQL 모니터링 솔루션 추천 바랍니다. [3] 수노 2013.09.26 5401
7190 기간별 검색 문의 [1] 아기탱구 2013.09.26 3899
7189 데이타 추출 [2] 냥냥 2013.09.25 3725
7188 계정 관련 질문 하나 올립니다. [2] ViewPple 2013.09.25 3122
7187 테이블 변수를 동적 쿼리에서 사용할 때 질문입니다. (질문 수정본) [1] Larry 2013.09.25 16747
7186 mysql 몇가지 질문... 이런마마 2013.09.25 3678
7185 PK 형 변환 질문 [4] 군고구마 2013.09.25 3923
7184 sp_executesql에 대해 문의좀 드리겠습니다. [3] 호야~♥ 2013.09.25 3855





XE Login