이 문서에서는 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 키워드 사용, 다음 키워드 오프셋/가져오기(인터넷에서 다른 사람들의 메소드를 수집하여 요약) 이 네 가지 방법의 아이디어만, 다른 방법은 이 변형을 기반으로 합니다.
학생 테이블의 레코드 중 쿼리할 부분
방법 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 ;
쿼리 결과 및 시간
방법 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;
쿼리 결과 및 시간
방법 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;
쿼리 결과 및 시간
네 번째 방법: 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 데이터는 뒤로 읽혀집니다.
결과 및 실행 시간
캡슐화된 저장 프로시저
마지막으로 모든 사람의 편의를 위해 페이징 저장 프로시저를 캡슐화하여 페이징을 작성할 때가 오면 이 저장 프로시저를 직접 호출할 수 있습니다. .
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

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

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

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

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

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

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

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


핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

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

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

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

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음
