>  기사  >  데이터 베이스  >  sqlserver의 페이징 쿼리 처리 방법을 설명하세요.

sqlserver의 페이징 쿼리 처리 방법을 설명하세요.

巴扎黑
巴扎黑원래의
2017-08-11 15:01:461815검색

다음은 제가 온라인에서 찾은 쿼리 스크립트를 작성하는 여러 가지 방법입니다. 참고용으로 스크립트 하우스 플랫폼에 공유하고 싶습니다.

sqlserver2008에서는 키워드 제한을 지원하지 않으므로 페이징 SQL 쿼리 문을 사용할 수 없습니다. MySQL. 다행히 sqlserver2008에서는 top, rownumber 등의 키워드를 제공하므로 이러한 키워드를 통해 페이징이 가능합니다. 다음은 인터넷에서 찾은 여러 쿼리 스크립트의 쓰기 방법입니다.

select top 10 * from table1
where id not in(select top 开始的位置 id from table1)

max:sql 코드:

select top 10 * from table1
where id>(select max(id)
from (select top 开始位置 id from table1 order by id)tt)

row:


sql 코드:

select *
from (
select row_number()over(order by tempcolumn)temprownumber,*
from (select top 开始位置+10 tempcolumn=0,* from table1)t
)tt
where temprownumber>开始位置

3가지 유형 페이징 방법은 max plan과 top입니다. plan.row 구성표


효율성: 1위: row

2위: max

3위: top

단점:

최대: 사용자 복잡한 SQL을 작성해야 하며 지원되지 않음 -고유한 열 정렬

top: 사용자가 복잡한 sql을 작성해야 하며, 복합 기본 키는 지원되지 않습니다. row: sqlserver2000은 지원되지 않습니다.

테스트 데이터:

페이지당 총 320만 개의 데이터 10개의 데이터를 표시하며 각각 20,000페이지, 150,000페이지, 320,000페이지를 테스트했습니다.

페이지 수, 상위 계획, 최대 계획, 행 계획20,000, 60ms, 46ms, 33ms150,000, 453ms, 343ms, 310ms

320,000, 953ms, 720ms, 686ms

는 연결하는 프로그램입니다. SQL 문 페이징 솔루션 ,

사용자가 언급한 sql 문은 복잡한 sql 로직을 작성할 필요가 없습니다

사용자가 다음과 같이 sql을 제공했습니다

sql code

select * from table1

5번째 항목부터 시작하여 5개 항목을 쿼리하여 처리합니다. SQL은

sql code



select *
from (
select row_number()over(order by tempcolumn)temprownumber,*
from (select top 10 tempcolumn=0,* from table1)t
)tt
where temprownumber>5

가 됩니다. 이것은 무엇을 의미합니까? 분해

먼저 사용자가 입력한 SQL 문을 살짝 수정합니다

select 뒤에 top을 추가하면 시작 위치 + 항목 개수가 됩니다


tempcolum 컬럼을 추가하면 이렇게 됩니다

sql 코드

select top 20 tempcolumn=0,* from clazz

embedded 여행 번호를 조회할 수 있도록 레이어를 하나 설정합니다

지금 방금 나온 열은 order by here

(sqlserver의 row_number 함수가 왜 order by로 해야 하는지 모르겠습니다)

sql 코드

select row_number()over(order by tempcolumn)temprownumber,*
from (修改过的查询)t

다른 레이어를 적용하고 시작 위치보다 행 번호가 작은 행을 필터링합니다.


sql code


select * from (第二层)tt
where temprownumber>10

위 내용은 sqlserver의 페이징 쿼리 처리 방법을 설명하세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.