이전 버전인 SQL 2000에서는 페이징 처리에 관련된 변수의 사용이 많이 불편하였습니다.
"SELECT TOP ()"에 변수를 바로 적용할 수가 없어서,
VARCHAR 변수에 담아서 EXECUTE문으로 일괄처리를 하는 방식으로 사용을 했었죠.
SQL 2005에서는 이러한 부분들이 많이 개선되었는데……
바로 TOP ()에 변수를 적용할 수가 있고, 또한 페이징 처리를 위한 ROW_NUMBER()라는 함수가 새로 생겼습니다.
SQL 2000에서의 쿼리는 TOP ()에 변수를 바로 적용할 수가 없어서 다음과 같이 적용하였습니다.
그러나 SQL 2005에서는 TOP()에 변수를 바로 적용하여 사용합니다.
예를 들면,
실제적인 페이징 처리를 위하여 SQL 2000에서는 TOP ()을 활용한 상관 하위 쿼리 등을 사용해서
원하는 쿼리 형식을 만들거나,
순번 혹은 순위 값을 처리하기 위한 기능으로 IDENTITY 속성을 지정한 임시 테이블
혹은, 테이블 변수를 사용하거나
IDENTITY() 함수를 SELECT INTO문과 함께 적용하는 방법을 사용하였습니다.
SQL 2005에서는
TOP()에 변수를 직접 입력하거나
ROW_NUMBER() 함수를 이용하여, 페이징 처리를 바로 구현할 수가 있습니다.
앞서 소개한 TOP() 구문의 향상된 기능을 병행한다면 이전보다 훨씬 좋은 쿼리 형식을 만들 수 있을 것입니다.
###########################################################################################
###########################################################################################
그러나.. 이러한 방법을 사용 하더라도..
테이블의 데이터를 모두 로드하는 것은 성능 향상에 아무런 도움도 되지 않는다..
위의 방법과 같이 상관 하의 쿼리에서 Top 절을 사용하지 않으면
결과적으로 볼때.. 속도 개선은 전혀 일어나지 않을 것이다.
그래서 내가 자주 사용하는 페이징 방법을 소개하겠다..
이 페이징 쿼리를 사용하기 위해서는..
받드시 identity 컬럼(필드) 혹은 중복되지 않는 컬럼이 필요하다..
그리고.. 성능 향상을 위해 이 필드를 인덱스화 하는 것이 좋다.
테이블은 이미 있는 것에서 필요한 것만 뽑아서 예제만 보여 주겠다..
위의 테이블에는 100만건이 넘는 데이터가 들었다..
스토어드 프로시저에서 사용하기 위해.. 다음과 같은 변수를 선언했다.
위의 @PageNo 와 @PageSize 는 임의 값이다.
그리고 가장 중요한 페이징 범위를 찾는다.
Select @MinCnt, @MaxCnt 를 중간에 기록한 것은..
값을 확인하기 위함다.
이제, 실제 쿼리에는 다음과 같이 Betwee을 사용한 쿼리만 있으면 된다.
추가로.. 결과 값이다.
전체 데이터는 1,103,244 개 인것을 확인할 수 있다..
Min 과 Max 값을 얻어내는 시간은 0.1초도 걸리지 않는다..
이런 식으로 쿼리를 사용한다면..
백만건 이상의 게시물이 있다해도 원하는 값만 쉽고 빠르게 얻어올 수 있을 것이다.
###########################################################################################
###########################################################################################
또 한가지 방법은..
임시 테이블에 Identity와 기본키에 해당하는 컬럼을 만들어서 조인을 하는 것이다.
먼저 다음과 같은 형식의 임시 테이블을 생성하고..
그리고.. 다음과 같은 형식의 쿼리를 만들면 된다.
[출처] 항해자
"쇼핑몰·홈페이지·오픈마켓
블로그·페이스북·이메일 등의 각종 마케팅 글쓰기, 각종 광고, 영업, 판매, 제안서, 전단지 반응율 3배×10배 이상 높이는 마법의 8단계 공식" |
☞자세히보기 |
|
|