커서 유형 선택 정보
선택할 커서 유형은 다음과 같은 몇 가지 변수에 따라 결정됩니다.
- 결과 집합의 크기
- 필요한 데이터의 비율
- 커서 열기 성능
- 스크롤 또는 위치 지정 업데이트 등 커서 작업에 필요한 항목
- 다른 사용자의 데이터 수정에 대한 표시 유형 수준
업데이트가 수행되지 않은 경우 결과 집합이 작을 때는 기본 설정을 사용해도 상관 없지만 행을 모두 검색하기 전에 응답을 찾고자 하는 큰 결과 집합에서는 동적 커서를 사용하는 것이 좋습니다.
검색할 데이터를 한 번에 모두 사용하려는 경우 위치 지정 업데이트 또는 스크롤이 필요하지 않으면 기본 결과 집합을 사용하는 것이 좋습니다. Microsoft SQL Server 2005 에서는 MARS(Multiple Active Result Sets)를 사용하는 경우 처리 중인 기본 결과 집합을 두 개 이상 사용할 수 없도록 하는 제한이 제거되었습니다.
커서 유형 선택 규칙
커서 유형을 선택할 때는 다음과 같은 간단한 규칙이 적용됩니다.
- 가능하면 기본 결과 집합을 사용합니다. 스크롤해야 할 경우 서버에 커서 구현을 요청하는 대신 작은 결과 집합을 클라이언트에 캐시한 다음 캐시를 통해 스크롤하는 것이 더 효율적일 수 있습니다.
- 보고서를 작성하는 등 전체 결과 집합을 클라이언트에 인출할 때는 기본 설정을 사용합니다. 기본 결과 집합을 사용하면 데이터를 클라이언트로 신속하게 전달할 수 있습니다.
- 응용 프로그램에서 위치 지정 업데이트를 사용할 때는 기본 결과 집합을 사용할 수 없습니다.
- 여러 결과 집합을 생성할 모든 Transact-SQL 문 또는 Transact-SQL 문 일괄 처리에는 기본 결과 집합을 사용해야 합니다.
- 동적 커서는 정적 커서나 키 집합 커서보다 빨리 열립니다. 정적 커서와 키 집합 커서를 열 때는 내부 임시 작업 테이블을 작성해야 하지만 동적 커서에는 필요하지 않습니다.
- 조인 시 키 집합 커서 및 정적 커서는 동적 커서보다 빠를 수 있습니다.
- 절대 인출을 수행하려면 키 집합 커서나 정적 커서를 사용해야 합니다.
- 정적 커서와 키 집합 커서는 tempdb 사용량을 늘립니다. 정적 서버 커서는 tempdb에 전체 커서를 작성하며 키 집합 커서는 tempdb에 키 집합을 작성합니다.
- 롤백 작업 중 커서를 계속 열어 두어야 하면 동기 정적 커서를 사용하고 CURSOR_CLOSE_ON_COMMIT를 OFF로 설정합니다.
서버 커서를 사용하면 API 인출 함수나 메서드를 호출할 때마다 서버 왕복이 발생합니다. 응용 프로그램은 블록 커서를 사용하고 각 인출 시 비교적 큰 행 수를 반환하여 이러한 왕복을 최소화해야 합니다.