SQL Server 쿼리에서 OFFSET 시뮬레이션
SQL Server에는 다른 데이터베이스 시스템과 달리 직접적인 OFFSET
절이 없습니다. 이 문서에서는 행을 건너뛰고 하위 집합을 검색하는 동일한 기능을 달성하는 방법을 자세히 설명합니다.
SQL Server 2005 이상용 솔루션:
2005 이상 버전의 가장 효율적인 방법은 하위 쿼리 내에서 ROW_NUMBER()
을 사용하는 것입니다.
행 번호 할당: 하위 쿼리는 지정된 열(예: ID
)에 따라 정렬된 각 레코드에 고유한 행 번호를 할당합니다.
<code class="language-sql">SELECT col1, col2, ROW_NUMBER() OVER (ORDER BY ID) AS RowNum FROM MyTable</code>
행 번호로 필터링: 그런 다음 외부 쿼리는 이 결과 집합을 필터링하여 원하는 범위 내의 행만 선택합니다. @startRow
과 @endRow
은 각각 시작 행 번호와 끝 행 번호를 나타냅니다.
<code class="language-sql">SELECT col1, col2 FROM ( SELECT col1, col2, ROW_NUMBER() OVER (ORDER BY ID) AS RowNum FROM MyTable ) AS RowNumberedTable WHERE RowNum BETWEEN @startRow AND @endRow;</code>
SQL Server 2000에 대한 접근 방식:
SQL Server 2000에는 대체 전략이 필요합니다.
인덱스 건너뛰기 스캔: 원하는 순서와 일치하는 ORDER BY
절이 있는 적절한 인덱스가 있는 경우 데이터베이스 엔진은 인덱스 스캔을 사용하여 효율적으로 행을 건너뛸 수 있습니다. 이는 인덱스와 데이터 분포에 따라 크게 달라집니다.
창 기능(근사): ROW_NUMBER()
만큼 직접적이지는 않지만 잠재적으로 다른 창 기능을 사용하여 유사한 효과를 얻을 수 있지만 이는 2005년 방법보다 효율성이 떨어질 수 있습니다.
커서 기반 반복: 스크롤 잠금이 있는 커서를 사용하면 결과 집합을 반복하고 선택적으로 행을 가져올 수 있지만 이 접근 방식은 일반적으로 집합 기반 솔루션보다 성능이 떨어집니다. 꼭 필요한 경우가 아니면 이를 피하세요.
성능 고려 사항:
성능 최적화 방법:
SELECT
절에서 필요한 열만 선택하세요.ROW_NUMBER()
계산 또는 인덱스 스캔이러한 기술을 사용하면 버전에 관계없이 SQL Server의 OFFSET
기능을 효과적으로 시뮬레이션할 수 있습니다. 최적의 성능을 위해서는 ROW_NUMBER()
방법(SQL Server 2005 이상)을 적극 권장합니다.
위 내용은 SQL Server에서 OFFSET을 시뮬레이션하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!