커서 유형 선택 정보

선택할 커서 유형은 다음과 같은 몇 가지 변수에 따라 결정됩니다.

  • 결과 집합의 크기

  • 필요한 데이터의 비율

  • 커서 열기 성능

  • 스크롤 또는 위치 지정 업데이트 등 커서 작업에 필요한 항목

  • 다른 사용자의 데이터 수정에 대한 표시 유형 수준

업데이트가 수행되지 않은 경우 결과 집합이 작을 때는 기본 설정을 사용해도 상관 없지만 행을 모두 검색하기 전에 응답을 찾고자 하는 큰 결과 집합에서는 동적 커서를 사용하는 것이 좋습니다.

검색할 데이터를 한 번에 모두 사용하려는 경우 위치 지정 업데이트 또는 스크롤이 필요하지 않으면 기본 결과 집합을 사용하는 것이 좋습니다. SQL Server에서는 MARS(Multiple Active Result Sets)를 사용하는 경우 처리 중인 기본 결과 집합을 두 개 이상 사용할 수 없도록 하는 제한이 제거되었습니다.

커서 유형 선택 규칙

커서 유형을 선택할 때는 다음과 같은 간단한 규칙이 적용됩니다.

  • 가능하면 기본 결과 집합을 사용합니다. 스크롤해야 할 경우 서버에 커서 구현을 요청하는 대신 작은 결과 집합을 클라이언트에 캐시한 다음 캐시를 통해 스크롤하는 것이 더 효율적일 수 있습니다.

  • 보고서를 작성하는 등 전체 결과 집합을 클라이언트에 인출할 때는 기본 설정을 사용합니다. 기본 결과 집합을 사용하면 데이터를 클라이언트로 신속하게 전달할 수 있습니다.

  • 응용 프로그램에서 위치 지정 업데이트를 사용할 때는 기본 결과 집합을 사용할 수 없습니다.

  • 여러 결과 집합을 생성할 모든 Transact-SQL 문 또는 Transact-SQL 문 일괄 처리에는 기본 결과 집합을 사용해야 합니다.

  • 동적 커서는 정적 커서나 키 집합 커서보다 빨리 열립니다. 정적 커서와 키 집합 커서를 열 때는 내부 임시 작업 테이블을 작성해야 하지만 동적 커서에는 필요하지 않습니다.

  • 조인 시 키 집합 커서 및 정적 커서는 동적 커서보다 빠를 수 있습니다.

  • 절대 인출을 수행하려면 키 집합 커서나 정적 커서를 사용해야 합니다.

  • 정적 커서와 키 집합 커서는 tempdb 사용량을 늘립니다. 정적 서버 커서는 tempdb에 전체 커서를 작성하며 키 집합 커서는 tempdb에 키 집합을 작성합니다.

  • 롤백 작업 중 커서를 계속 열어 두어야 하면 동기 정적 커서를 사용하고 CURSOR_CLOSE_ON_COMMIT를 OFF로 설정합니다.

서버 커서를 사용하면 API 인출 함수나 메서드를 호출할 때마다 서버 왕복이 발생합니다. 응용 프로그램은 블록 커서를 사용하고 각 인출 시 비교적 큰 행 수를 반환하여 이러한 왕복을 최소화해야 합니다.