먼저 몇 가지 주요 페이징 방법과 핵심 설명을 제공하고, 관심 있는 독자는 일반적으로 사용되는 여러 저장 프로시저 페이징 방법에 대한 다음 데이터를 살펴볼 수 있습니다.
TopN 방법
ID가 IN이 아닌 TableName에서 Top(@PageSize)을 선택합니다.
(테이블 이름에서 Top ((@PageIndex-1)*@PageSize) ID를 선택합니다. 여기서 .... order by ... )
어디서 .... 주문 ....
임시 테이블
다음과 같이 코드 코드를 복사합니다.
@indextable 테이블 선언(id int Identity(1,1),nid int,PostUserName nvarchar(50))
@PageLowerBound int 선언
@PageUpperBound int 선언
@PageLowerBound=(@pageindex-1)*@pagesize--하한 설정
@PageUpperBound=@PageLowerBound+@pagesize--상한 설정
행 개수 @PageUpperBound 설정
@indextable(nid,PostUserName)에 삽입하고 TableName 순서에서 ReplyID,PostUserName을 선택합니다.
TableName p,@indextable t에서 *를 선택합니다. 여기서 p.ID=t.nid입니다.
t.id>@PageLowerBound 및 t.id<=@PageUpperBound 순서는 t.id입니다.
CTE--2005의 새로운 구문은 임시 테이블과 유사하지만 수명 주기가 약간 다릅니다.
cte_temp 사용 - 제로타임 테이블을 정의합니다. PageIndex는 검색 결과의 페이지 번호를 저장하는 계산된 필드입니다.
As (ceiling((Row_Number() over(order by .... )-1)/@pagesize as int) as PageIndex,* from TableName where.....)
pageindex=@pageindex-1인 cte_temp에서 *를 선택합니다.
결론적으로:
TopN은 페이지 수가 적을 때 가장 빠릅니다. 10페이지 미만이면 사용을 고려해 볼 수 있습니다. CTE와 임시 테이블 시간은 임시 테이블보다 더 많은 시간을 소비하지만 이로 인해 발생하지는 않습니다. tempdb가 급증하고 IO가 증가합니다.
성능 비교
테스트 환경: win2003server, Sqlserver2005, 라이브러리 크기 2,567,245행, where 절 없음, 테스트 중 페이지 크기 50, 페이지 번호를 변수로 사용
10의 인덱스인 0, 3, 10, 31, 100, 316, 1000, 3162... 페이지를 가져옵니다. 테스트 결과는 다음과 같습니다.
페이지 수TopN CTE 임시 테이블(캐시 있음) 임시 테이블(캐시 없음)
회사에서 사용 중인 저장 프로시저 CTE 개선 사항
1 3 12 10 101 457 7302
3 15 7 79 5524 464 7191
10 127 5504 88 3801 464 6116
32 588 9672 122 3601 976 7602
100 4680 9738 166 4235 486 7151
316 45271 9764 323 3867 522 7255
1000 널 9806 869 2578 635 8948
3162 널 9822 2485 4110 12460 8210
10000 널 9754 7812 11926 14250 7359
31623 널 9775 18729 33218 15249 7511
100000 널 널 31538 55569 17139 6124
데이터 해석 및 분석
임시 테이블은 캐시 여부의 두 가지 유형으로 구분됩니다. CTE 개선은 CTE 임시 테이블에 선택되는 열 수만 줄이는 것을 의미합니다. 시간을 계산할 수 없습니다(시간이 너무 깁니다). 데이터 단위는 밀리초입니다.
위의 데이터를 보면 TopN이 처음 32페이지에서는 장점이 있지만, 페이지 수가 늘어날수록 성능이 급격하게 떨어지는 것을 알 수 있는데, 평균 2초 정도의 향상으로 CTE보다 성능이 더 좋아집니다. 그래도 임시 테이블보다는 낫지만 임시 테이블을 사용하면 로그 파일의 크기가 커지고 IO가 많이 발생한다는 점을 고려하면 현재 회사에서 사용하는 저장 프로시저도 나름의 장점이 있습니다. , 그러나 페이지 번호가 이후이면 성능이 저하됩니다.