관리 메뉴

nalaolla

[MSSQL 2012] MSSQL 2012에서 새롭게 추가된 페이징 쿼리 기법 본문

MS-SQL

[MSSQL 2012] MSSQL 2012에서 새롭게 추가된 페이징 쿼리 기법

날아올라↗↗ 2015. 12. 20. 14:14
728x90
반응형

이번 MS-SQL 2012에서 새로운 페이징 기법을 제공되었습니다.

기존의 페이징 처리를 하기위해 Top, row_number, NOT IN, IN 을 동원한 작업을 했어야 했는데요.

아주 간단한 페이징을 최적화 할 수 있게 되었네요.

개발자들에게 희소식이 아닐까 합니다.

물론, 성능면에서는 현업에서 충분한 테스트를 진행해보아야 겠지만, 간단히 소개합니다.

너무 간단해져서 설명할것도 따로 없을 듯 합니다.

SELECT 
IDX
,ID
,NAME
FROM T_MEMBER
ORDER BY IDX DESC 
OFFSET 10 ROWS -- 시작될 카운트 번호
FETCH NEXT 10 ROWS ONLY; -- 몇개를 출력할것인지

자 보시죠.. ㅋㅋ

많이 간단해 졌죠.

OFFSET 기능이 추가 되면서, 페이징 쿼리를 쉽게 구현할수 있도록 해놓았습니다.

많이 응용해보면 좋을듯 합니다.

한가지 주의할점은 OFFSET 지정시 이용되는 ORDER BY 의 컬럼에 대한 몇가지 제약이 있다는 것입니다.

그 제약은 다음과 같습니다.

Offset Fetch에 대한 제한 사항

l 외부 쿼리와 상관 관계를 만들 수 없습니다.

l OVER 절은 OFFSET 및 FETCH를 지원하지 않습니다.

l OFFSET 및 FETCH는 INSERT, UPDATE, MERGE 및 DELETE 문에서 직접 지정할 수 없지만 이러한 문에 정의된 하위 쿼리에서는 지정할 수 있습니다

l UNION, EXCEPT 또는 INTERSECT 연산자를 사용하는 쿼리에서는 쿼리 결과의 순서를 지정하는 마지막 쿼리에서만 OFFSET 및 FETCH를 지정할 수 있습니다.

l 같은 쿼리 식(같은 쿼리 범위)에서 TOP을 OFFSET 및 FETCH와 결합할 수 없습니다.

안정된 최적화를 위해서는 아래 조건을 만족해야 합니다.

l 쿼리에 사용되는 기본 데이터가 변경되지 않아야 합니다.즉, 쿼리와 연결된 행이 업데이트되지 않거나 페이지에 대한 모든 쿼리 요청이 스냅숏 또는 직렬화 가능 트랜잭션 격리를 사용하여 단일 트랜잭션에서 실행되어야 합니다.
(위 온라인 설명서의 “단일 트랜잭션에서 여러 쿼리 실행” 쿼리 예를 참고하십시오.)

l ORDER BY 절이 고유한 열 또는 열의 조합을 포함해야 합니다.


자세한 정보는 MSDN을 참고해주세요 ^^

MSDN : http://msdn.microsoft.com/ko-kr/library/ms188385(v=sql.110).aspx#Offset

그리고 성능관련 정보는 다음을 참고해주세요

http://www.mssqlgirl.com/paging-function-performance-in-sql-server-2012.html

역쉬 성능은 기대이하인듯 한듯 합니다. ^^

728x90
반응형

'MS-SQL' 카테고리의 다른 글

mssql 도 rownum 된다.  (0) 2015.12.20
비용 발생하는 쿼리 찾아내기  (0) 2015.12.20
거리계산 최종정리  (0) 2015.12.20
거리계산  (0) 2015.12.20
거리계산  (0) 2015.12.20