테스트 결과, 14483461개 레코드 중 100000페이지를 오름차순, 내림차순으로 페이지당 10개 레코드로 쿼리했을 때 첫 번째는 0.47초, 두 번째는 0.43초였습니다. 테스트 구문은 다음과 같습니다. powered by vevb.com.
exec GetRecordFromPage 뉴스,newsid,10,100000
news는 테이블 이름이고, newsid는 키 필드입니다. 사용할 때 먼저 newsid를 색인화하세요.
다음과 같이 코드 코드를 복사합니다.
/*
함수 이름: GetRecordFromPage
기능: 지정된 페이지의 데이터를 가져옵니다.
매개변수 설명: 데이터가 포함된 @tblName 테이블 이름
@fldName 키 필드 이름
@PageSize 페이지당 레코드 수
@PageIndex 얻을 페이지 번호
@OrderType 정렬 유형, 0 - 오름차순, 1 - 내림차순
@strWhere 쿼리 조건(참고: where를 추가하지 마세요)
저자: 아이언 피스트
이메일: [email protected]
작성시간 : 2006-07-04
수정시간 : 2006-07-04
*/
절차 만들기 GetRecordFromPage
@tblName varchar(255), -- 테이블 이름
@fldName varchar(255), -- 필드 이름
@PageSize int = 10, -- 페이지 크기
@PageIndex int = 1, -- 페이지 번호
@OrderType bit = 0, -- 정렬 방식을 설정합니다. 0이 아닌 값은 내림차순으로 표시됩니다.
@strWhere varchar(2000) = '' -- 쿼리 조건(참고: 어디에 추가하지 마세요)
처럼
@strSQL varchar(6000) 선언 - 기본 명령문
@strTmp varchar(1000) 선언 - 임시 변수
@strOrder varchar(500) 선언 -- 정렬 유형
@OrderType != 0인 경우
시작하다
set @strTmp = '<(최소 선택'
set @strOrder = ' [' + @fldName + '] desc'로 정렬
끝
또 다른
시작하다
set @strTmp = '>(최대 선택'
set @strOrder = ' [' + @fldName +'] asc'로 정렬
끝
set @strSQL = 'select top' + str(@PageSize) + ' * from ['
+ @tblName + '] 여기서 [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (상단 ' + str((@PageIndex-1)*@PageSize) + ' [' 선택
+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
+ @strOrder
if @strWhere != ''
set @strSQL = 'select top' + str(@PageSize) + ' * from ['
+ @tblName + '] 여기서 [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (상단 ' + str((@PageIndex-1)*@PageSize) + ' [' 선택
+ @fldName + '] from [' + @tblName + '] 여기서 ' + @strWhere + ' '
+ @strOrder + ')(tblTmp) 및 ' + @strWhere + ' ' + @strOrder
@PageIndex = 1인 경우
시작하다
@strTmp = '' 설정
if @strWhere != ''
set @strTmp = ' where (' + @strWhere + ')'
set @strSQL = 'select top' + str(@PageSize) + ' * from ['
+ @tblName + ']' + @strTmp + ' ' + @strOrder
끝
exec(@strSQL)
가다