찾다
데이터 베이스SQLSQL Server의 페이징 방법은 무엇입니까?

이 문서에서는 SQL Server 2012 버전을 사용하여 SQL Server의 페이징 방법에 대해 설명합니다. 다음에서 pageIndex는 페이지 수를 나타내고, pageSize는 한 페이지에 포함된 레코드를 나타냅니다. 다음은 특정 예를 포함하며 쿼리 페이지 2를 설정하고 각 페이지에는 10개의 레코드가 포함됩니다.

먼저 SQL Server의 페이징과 MySQL의 페이징의 차이점에 대해 이야기해 보겠습니다. MySQL의 페이징은 Limit(pageIndex-1) 및 pageSize를 사용하여 직접 완료할 수 있습니다. 그러나 SQL Server에는 Limit 키워드가 없고 top만 있습니다. 제한과 유사한 키워드입니다. 그래서 페이징이 더 번거롭습니다.

  내가 아는 SQL 서버 페이징 유형은 4가지뿐입니다. 삼중 루프, max(기본 키) 사용, row_number 키워드 사용, 다음 키워드 오프셋/가져오기(인터넷에서 다른 사람들의 메소드를 수집하여 요약) 이 네 가지 방법의 아이디어만, 다른 방법은 이 변형을 기반으로 합니다.

학생 테이블의 레코드 중 쿼리할 부분

SQL Server의 페이징 방법은 무엇입니까?

방법 1: 삼중 루프

Idea

먼저 처음 20페이지를 가져온 다음 역순으로, 처음 10개의 레코드를 역순으로 가져오므로 페이징에 필요한 데이터를 얻을 수 있지만 순서가 반대가 됩니다. 그런 다음 다시 순서를 바꾸거나 정렬을 중지하고 정렬을 위해 프런트 엔드에 직접 전달할 수 있습니다.

   이 유형으로 간주될 수 있는 또 다른 방법이 있습니다. 여기에는 코드를 넣지 않겠습니다. 먼저 처음 10개의 레코드를 쿼리한 다음 not in을 사용하여 이 10개를 제외하는 것입니다. 기록하고 다시 쿼리하세요.

코드 구현

-- 设置执行时间开始,用来查看性能的
set statistics time on ;
-- 分页查询(通用型)
select * 
from (select top pageSize * 
from (select top (pageIndex*pageSize) * 
from student 
order by sNo asc ) -- 其中里面这层,必须指定按照升序排序,省略的话,查询出的结果是错误的。
as temp_sum_student 
order by sNo desc ) temp_order
order by sNo asc

-- 分页查询第2页,每页有10条记录
select * 
from (select top 10 * 
from (select top 20 * 
from student 
order by sNo asc ) -- 其中里面这层,必须指定按照升序排序,省略的话,查询出的结果是错误的。
as temp_sum_student 
order by sNo desc ) temp_order
order by sNo asc
;

쿼리 결과 및 시간

SQL Server의 페이징 방법은 무엇입니까?

SQL Server의 페이징 방법은 무엇입니까?

방법 2: max(기본 키) 사용

먼저 레코드의 처음 11행을 맨 위에 놓고 max(id)를 사용하여 가장 큰 값을 얻습니다. 그런 다음 이 테이블의 처음 10개 항목을 다시 쿼리하되 id>max(id)라는 조건을 추가합니다.

코드 구현

set statistics time on;
-- 分页查询(通用型)
select top pageSize * 
from student 
where sNo>=
(select max(sNo) 
from (select top ((pageIndex-1)*pageSize+1) sNo
from student 
order by  sNo asc) temp_max_ids) 
order by sNo;


-- 分页查询第2页,每页有10条记录
select top 10 * 
from student 
where sNo>=
(select max(sNo) 
from (select top 11 sNo
from student 
order by  sNo asc) temp_max_ids) 
order by sNo;

쿼리 결과 및 시간

SQL Server의 페이징 방법은 무엇입니까?

SQL Server의 페이징 방법은 무엇입니까?

방법 3: row_number 키워드 사용

row_number() over(order by id) 함수를 직접 사용하여 행 수를 계산하고 선택 해당 행 숫자만 반환하지만 이 키워드는 SQL Server 2005 이상에서만 사용할 수 있습니다.

SQL 구현

set statistics time on;
-- 分页查询(通用型)
select top pageSize * 
from (select row_number() 
over(order by sno asc) as rownumber,* 
from student) temp_row
where rownumber>((pageIndex-1)*pageSize);

set statistics time on;
-- 分页查询第2页,每页有10条记录
select top 10 * 
from (select row_number() 
over(order by sno asc) as rownumber,* 
from student) temp_row
where rownumber>10;

쿼리 결과 및 시간

SQL Server의 페이징 방법은 무엇입니까?

SQL Server의 페이징 방법은 무엇입니까?

네 번째 방법: offset /fetch next(2012 버전 이상에서만 사용 가능)

코드 구현

set statistics time on;
-- 分页查询(通用型)
select * from student
order by sno 
offset ((@pageIndex-1)*@pageSize) rows
fetch next @pageSize rows only;

-- 分页查询第2页,每页有10条记录
select * from student
order by sno  
offset 10 rows
fetch next 10 rows only ;

offset A 행, 첫 번째 A 레코드 삭제되고 다음 B 행만 가져오고 B 데이터는 뒤로 읽혀집니다.

결과 및 실행 시간

SQL Server의 페이징 방법은 무엇입니까?

SQL Server의 페이징 방법은 무엇입니까?

캡슐화된 저장 프로시저

마지막으로 모든 사람의 편의를 위해 페이징 저장 프로시저를 캡슐화하여 페이징을 작성할 때가 오면 이 저장 프로시저를 직접 호출할 수 있습니다. .

Paging Stored Procedure

create procedure paging_procedure
(	@pageIndex int, -- 第几页
	@pageSize int  -- 每页包含的记录数
)
as
begin 
	select top (select @pageSize) *     -- 这里注意一下,不能直接把变量放在这里,要用select
	from (select row_number() over(order by sno) as rownumber,* 
			from student) temp_row 
	where rownumber>(@pageIndex-1)*@pageSize;
end

-- 到时候直接调用就可以了,执行如下的语句进行调用分页的存储过程
exec paging_procedure @pageIndex=2,@pageSize=10;

Summary

  위 4가지 페이징 방법의 실행 시간을 기준으로 보면 위 4가지 페이징 방법 중 두 번째, 세 번째, 세 번째 방법의 성능이 거의 동일하다는 것을 알 수 있으며, 그러나 세 번째와 네 번째 페이징 방법의 성능은 비슷하며 성능이 좋지 않아 권장되지 않습니다. 또한 이 블로그에서는 소량의 데이터를 테스트 중이고 많은 양의 데이터를 페이징하지 않았기 때문에 많은 양의 데이터를 페이징해야 할 때 어떤 방법이 더 나은 성능을 발휘하는지 명확하지 않습니다. 여기서는 네 번째 방법을 추천합니다. 결국 네 번째 방법은 SQL Server 회사에서 업그레이드한 후 도입한 새로운 방법이므로 이론적으로 성능과 가독성이 더 좋아야 합니다.

관련 추천: "mysql 튜토리얼"

위 내용은 SQL Server의 페이징 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 CSDN에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
데이터 분석을위한 SQL : 비즈니스 인텔리전스를위한 고급 기술데이터 분석을위한 SQL : 비즈니스 인텔리전스를위한 고급 기술Apr 14, 2025 am 12:02 AM

SQL의 고급 쿼리 기술에는 하위 쿼리, 창 함수, CTE 및 복잡한 조인이 포함되어 복잡한 데이터 분석 요구 사항을 처리 할 수 ​​있습니다. 1) 하위 쿼리는 각 부서에서 급여가 가장 높은 직원을 찾는 데 사용됩니다. 2) 창 함수와 CTE는 직원 급여 성장 ​​동향을 분석하는 데 사용됩니다. 3) 성능 최적화 전략에는 인덱스 최적화, 쿼리 재 작성 및 파티션 테이블 사용이 포함됩니다.

MySQL : SQL의 특정 구현MySQL : SQL의 특정 구현Apr 13, 2025 am 12:02 AM

MySQL은 표준 SQL 기능 및 확장을 제공하는 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 1) MySQL은 한계 조항을 작성, 삽입, 업데이트, 삭제 및 확장과 같은 표준 SQL 작업을 지원합니다. 2) Innodb 및 Myisam과 같은 스토리지 엔진을 사용하여 다양한 시나리오에 적합합니다. 3) 사용자는 테이블 작성, 데이터 삽입 및 저장 프로 시저를 사용하는 것과 같은 고급 기능을 통해 MySQL을 효율적으로 사용할 수 있습니다.

SQL : 모든 사람이 데이터 관리에 액세스 할 수 있도록합니다SQL : 모든 사람이 데이터 관리에 액세스 할 수 있도록합니다Apr 12, 2025 am 12:14 AM

sqlmakesdatamanagementaCcessibletoallbyprovingasimpleyetpooltooltoolforqueryinganddatabases.1) itworkswithrelationalDatabases.2) sql'sstrengthliesinfiltering, andjoiningdata, andjoiningdata, andjoiningdata

SQL 인덱싱 전략 : 쿼리 성능 향상 순서SQL 인덱싱 전략 : 쿼리 성능 향상 순서Apr 11, 2025 am 12:04 AM

SQL 인덱스는 영리한 설계를 통해 쿼리 성능을 크게 향상시킬 수 있습니다. 1. B- 트리, 해시 또는 전문 지수와 같은 적절한 인덱스 유형을 선택하십시오. 2. 복합 인덱스를 사용하여 멀티 필드 쿼리를 최적화하십시오. 3. 데이터 유지 보수 오버 헤드를 줄이려면 과도한 인덱스를 피하십시오. 4. 불필요한 인덱스 재건 및 제거를 포함하여 정기적으로 인덱스를 유지합니다.

SQL에서 제약 조건을 삭제하는 방법SQL에서 제약 조건을 삭제하는 방법Apr 10, 2025 pm 12:21 PM

SQL에서 제약 조건을 삭제하려면 다음 단계를 수행하십시오. 삭제할 제약 조건을 식별하십시오. Alter Table 문을 사용하십시오. Alter Table Tame 이름 드롭 제약 조건 제한 이름; 삭제를 확인하십시오.

SQL 트리거를 설정하는 방법SQL 트리거를 설정하는 방법Apr 10, 2025 pm 12:18 PM

SQL 트리거는 지정된 테이블에서 특정 이벤트가 실행될 때 특정 작업을 자동으로 수행하는 데이터베이스 개체입니다. SQL 트리거를 설정하려면 트리거 이름, 테이블 이름, 이벤트 유형 및 트리거 코드가 포함 된 Trigger 문을 사용할 수 있습니다. 트리거 코드는 AS 키워드를 사용하여 정의되며 SQL 또는 PL/SQL 문 또는 블록을 포함합니다. 트리거 조건을 지정하면 where 절을 사용하여 트리거의 실행 범위를 제한 할 수 있습니다. 트리거 작업은 삽입, 업데이트 또는 삭제 명령문을 사용하여 트리거 코드에서 수행 할 수 있습니다. 신규 및 기존 키워드를 사용하여 영향을받는 키워드를 트리거 코드에서 참조 할 수 있습니다.

SQL 쿼리에 인덱스를 추가하는 방법SQL 쿼리에 인덱스를 추가하는 방법Apr 10, 2025 pm 12:15 PM

인덱싱은 데이터 열을 정렬하여 데이터 검색을 가속화하는 데이터 구조입니다. SQL 쿼리에 인덱스를 추가하는 단계는 다음과 같습니다. 인덱싱 해야하는 열을 결정하십시오. 적절한 인덱스 유형 (b-tree, hash 또는 bitmap)을 선택하십시오. Create Index 명령을 사용하여 인덱스를 작성하십시오. 효율성을 유지하기 위해 지수를 정기적으로 재구성하거나 재구성합니다. 인덱스 추가의 이점에는 개선 된 쿼리 성능, I/O 작동 감소, 최적화 된 정렬 및 필터링 및 개선 된 동시성이 포함됩니다. 쿼리가 종종 특정 열을 사용하는 경우 정렬 또는 그룹화 해야하는 다량의 데이터를 반환하고, 큰 테이블 또는 큰 데이터베이스 테이블이 포함되므로 인덱스 추가를 고려해야합니다.

SQL 문에 ifelse를 사용하는 방법SQL 문에 ifelse를 사용하는 방법Apr 10, 2025 pm 12:12 PM

IFELSE 문은 조건부 평가 결과에 따라 다른 값을 반환하는 조건부 명세서입니다. 구문 구조는 다음과 같습니다. if (조건) 그런 다음 return_value_if_condition_is_true else return_value_if_condition_is_false end if;.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음