안녕하세요.


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 2023년 1월 - SQLER의 업데이트 강좌 리스트 코난(김대우) 2023.01.02 551
7213 테이블의 최종 스키마가 변경된 시각 아는법. [2] 내인생에GG란없다 2013.10.01 3833
7212 mysql workbench를 이용하여 접속.. 메신져 2013.10.01 8702
7211 DeadLock 관련 문의 드립니다. [7] 빌리 2013.10.01 5266
7210 mssql 2008 r2 평가판과 express버전 둘이 같이 설치 되나요? 김준형_283549 2013.09.30 4513
7209 메세지 내용, 대처법 알려주세용 ^^ [2] 비홍 2013.09.30 11945
7208 mssql 엑셀연동 [3] safdsfs 2013.09.29 6589
7207 초보의 질문입니다. 한테이블에 모든 정보가 들어있을때 분류....... [3] 꿈꾸는나무 2013.09.29 3399
7206 3일째 고민했더니 이제 머리가 안돌아가네요..ㅠㅠ [7] 다웅이쌔끈 2013.09.27 4249
7205 메모리 관련 문의 [1] 빌리 2013.09.27 7740
7204 char 형태의 데이터를 datetime 형태의 데이터로 형변환 [4] 블릿카가 2013.09.27 3950
7203 저장프로시정 진행중 메시지 박스 [2] 여행스케치 2013.09.27 4436
7202 MSSQL 에 연결하는 프로그램에서 최적 Connection 개수는 어떻게 판단해야하나요? [2] 고영훈_275947 2013.09.27 6883
7201 rank () 함수로 쿼리 사용중 문제가 있어 질문드립니다. [2] 김락중_278785 2013.09.27 4884
7200 500 Internal Server Error 문제 문의 [1] 비홍 2013.09.27 11529
7199 addlinkedserver 관련 [3] hhhh 2013.09.27 3959
7198 구글 위경도 좌표 테이블에서 거리를 계산하는 MySql쿼리=> MSSql 변환 문의 [3] 자유인s 2013.09.27 19281
7197 connection error [1] 이유진_301818 2013.09.27 3488
» 중첩된 WHILE문 수행 프로시저에서 커서와 테이블 변수 속도 관련 문의 [7] Larry 2013.09.26 11006
7195 작업모니터에서.... 비홍 2013.09.26 4310
7194 시퀀스와 기본키, 유니크 관련문의입니다. [15] 하하하하하 2013.09.26 5312





XE Login