강의 컨설팅 트레이닝 무료진단 무료책자 마케팅편지 마케팅정보공유 다이어리 서비스제휴 고객센터

MS-SQL에서 개선된 페이징 쿼리
작성자 : 13 김영철
등록날짜 : 2009.01.23 01:13
2,719

이전 버전인 SQL 2000에서는 페이징 처리에 관련된 변수의 사용이 많이 불편하였습니다.
"SELECT TOP ()"에 변수를 바로 적용할 수가 없어서,

VARCHAR 변수에 담아서 EXECUTE문으로 일괄처리를 하는 방식으로 사용을 했었죠.


SQL 2005에서는 이러한 부분들이 많이 개선되었는데……
바로 TOP ()에 변수를 적용할 수가 있고, 또한 페이징 처리를 위한 ROW_NUMBER()라는 함수가 새로 생겼습니다.



SQL 2000에서의 쿼리는 TOP ()에 변수를 바로 적용할 수가 없어서 다음과 같이 적용하였습니다.
download.blog?fhandle=YmxvZzUzMjdAZnMzLn

 

그러나 SQL 2005에서는 TOP()에 변수를 바로 적용하여 사용합니다.
예를 들면,
download.blog?fhandle=YmxvZzUzMjdAZnMyLn


실제적인 페이징 처리를 위하여 SQL 2000에서는 TOP ()을 활용한 상관 하위 쿼리 등을 사용해서

원하는 쿼리 형식을 만들거나,

순번 혹은 순위 값을 처리하기 위한 기능으로 IDENTITY 속성을 지정한 임시 테이블

혹은, 테이블 변수를 사용하거나

IDENTITY() 함수를 SELECT INTO문과 함께 적용하는 방법을 사용하였습니다.
download.blog?fhandle=YmxvZzUzMjdAZnMzLn

SQL 2005에서는

TOP()에 변수를 직접 입력하거나

ROW_NUMBER() 함수를 이용하여, 페이징 처리를 바로 구현할 수가 있습니다.
download.blog?fhandle=YmxvZzUzMjdAZnMzLn

앞서 소개한 TOP() 구문의 향상된 기능을 병행한다면 이전보다 훨씬 좋은 쿼리 형식을 만들 수 있을 것입니다.

 

 

 

###########################################################################################

###########################################################################################

 

 

 

그러나.. 이러한 방법을 사용 하더라도..

테이블의 데이터를 모두 로드하는 것은 성능 향상에 아무런 도움도 되지 않는다..

 

 

위의 방법과 같이 상관 하의 쿼리에서 Top 절을 사용하지 않으면

결과적으로 볼때.. 속도 개선은 전혀 일어나지 않을 것이다.

 

 

 

그래서 내가 자주 사용하는 페이징 방법을 소개하겠다..

이 페이징 쿼리를 사용하기 위해서는..

받드시 identity 컬럼(필드) 혹은 중복되지 않는 컬럼이 필요하다..

 

그리고.. 성능 향상을 위해 이 필드를 인덱스화 하는 것이 좋다.

 

 

테이블은 이미 있는 것에서 필요한 것만 뽑아서 예제만 보여 주겠다..

table-mission2hs.jpg

 

 

위의 테이블에는 100만건이 넘는 데이터가 들었다..

 

 

스토어드 프로시저에서 사용하기 위해.. 다음과 같은 변수를 선언했다.

variable-mission2hs.jpg

 

위의 @PageNo 와  @PageSize 는 임의 값이다.

 

 

그리고 가장 중요한 페이징 범위를 찾는다.

values-mission2hs.jpg

 

Select   @MinCnt, @MaxCnt  를 중간에 기록한 것은..

값을 확인하기 위함다.

 

 

이제, 실제 쿼리에는 다음과 같이 Betwee을 사용한 쿼리만 있으면 된다.

recordset-mission2hs.jpg

 

 

추가로.. 결과 값이다.

result-mission2hs.jpg

 

 

전체 데이터는  1,103,244 개 인것을 확인할 수 있다..

 

 

Min 과 Max 값을 얻어내는 시간은 0.1초도 걸리지 않는다..

이런 식으로 쿼리를 사용한다면..

백만건 이상의 게시물이 있다해도 원하는 값만 쉽고 빠르게 얻어올 수 있을 것이다.

 

 

###########################################################################################

###########################################################################################

 

 

또 한가지 방법은..

임시 테이블에 Identity와 기본키에 해당하는 컬럼을 만들어서 조인을 하는 것이다.

 

 

 먼저 다음과 같은 형식의 임시 테이블을 생성하고..

tmptable-mission2hs.gif


 
 
기본키에 해당하는 컬럼(필드)만 한 페이지 분량만 집어 넣는다.

tmpvalue-mission2hs.gif

 

 

그리고.. 다음과 같은 형식의 쿼리를 만들면 된다.
query-mission2hs.gif
 
 
 
테스트 결과 속도는 아주 만족스럽다.
100만건 이상의 테이블에서 매우 빠른 속도를 냈다..
 
 

[출처]  항해자

"쇼핑몰·홈페이지·오픈마켓
블로그·페이스북·이메일 등의 각종 마케팅 글쓰기,
각종 광고, 영업, 판매, 제안서, 전단지
반응율 3배×10배 이상 높이는 마법의 8단계 공식"
자세히보기

Comments

번호 제목 글쓴이 날짜 조회
2565 문자열에서 단어 분리 - SQL Server 2005 M 최고의하루 12.23 2397
2564 25가지 SQL작성법-3 M 최고의하루 12.23 2132
2563 25가지 SQL작성법-2 M 최고의하루 12.23 2410
2562 25가지 SQL작성법-1 M 최고의하루 12.23 2132
2561 제약조건(1) M 최고의하루 12.20 3645
2560 [MSSQL]SQL Server Management Studio Express M 최고의하루 12.20 2619
2559 Microsoft SQL Server 2005 Express Edition SP2 M 최고의하루 12.19 2331
2558 Microsoft SQL Server Management Studio Express SP2 M 최고의하루 12.19 2408
2557 [MSSQL] 데이터 백업과 복구 ( SQL SERVER ) M 최고의하루 12.18 2686
2556 [ Sybase ] Sybase 기본 명령어 M 최고의하루 12.18 2816
2555 오라클(Oracle) 10g Database 설치 M 최고의하루 12.04 3133
2554 오라클데이터베이스 복구 M 최고의하루 12.04 2200
2553 MSSQL에서 문자로 된 날짜 시간 차이값 얻기 13 김영철 01.24 3712
2552 T-SQL 페이징 구현하기 13 김영철 01.24 2748
2551 데이터가 저장되는 형태와 인덱스 페이지 13 김영철 01.23 1395
2550 SQL Server 2000의 현재 버전 확인 13 김영철 01.23 2104
2549 유용한 SQL 쿼리 13 김영철 01.23 1876
2548 [MSSQL] 게시판 페이징 쿼리 13 김영철 01.23 2466
2547 게시판에서 페이징 쿼리 13 김영철 01.23 2025
2546 테이블의 레코드 총 개수 얻기 좀 더 빠른 방법 13 김영철 01.23 2026
2545 데이터베이스 내에 있는 모든 테이블의 row 수와 용량 구하기 13 김영철 01.23 2044
2544 저장프로시저 디버깅 준비 13 김영철 01.23 2081
2543 [MS-SQL] Parameters 를 이용한 쿼리실행 13 김영철 01.23 2871
2542 MS SQL 서버 확장 스토어드 프로시저 만들기 13 김영철 01.23 2987
열람중 MS-SQL에서 개선된 페이징 쿼리 13 김영철 01.23 2720
2540 MS-SQL Server Transaction Isolation Level 13 김영철 01.23 2595
2539 다른 서버로 DB 백업 받기 13 김영철 01.23 2198
2538 MSSQL 내장 함수 목록 13 김영철 01.23 2135
2537 몇가지 sql 명령어 13 김영철 01.23 2873
2536 명령어정리 13 김영철 01.23 1708
마케팅
특별 마케팅자료
다운로드 마케팅자료
창업,경영
기획,카피,상품전략
동기부여,성취