>  기사  >  데이터 베이스  >  세 가지 페이징 방법의 효율성에 대한 간단한 테스트

세 가지 페이징 방법의 효율성에 대한 간단한 테스트

巴扎黑
巴扎黑원래의
2017-05-01 10:40:071319검색

데이터 양이 많고 위치가 다른 페이지를 비교해봤습니다.

테이블 만들기:

CREATE TABLE [TestTable] (
 [ID] [int] IDENTITY (1, 1) NOT NULL ,
 [FirstName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
 [LastName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
 [Country] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
 [Note] [nvarchar] (2000) COLLATE Chinese_PRC_CI_AS NULL 
) ON [PRIMARY]
GO

데이터 삽입: (1백만)

SET IDENTITY_INSERT TestTable ON
declare @i int
set @i=1
while @i<=1000000
begin
    insert into TestTable([id], FirstName, LastName, Country,Note) values(@i, &#39;FirstName_XXX&#39;,&#39;LastName_XXX&#39;,&#39;Country_XXX&#39;,&#39;Note_XXX&#39;)
    set @i=@i+1
end
SET IDENTITY_INSERT TestTable OFF

페이지 매김 솔루션 1: (페이지 매김을 위해 Not In 및 SELECT TOP 사용)

문장형:

SELECT TOP 页大小 *
FROM TestTable
WHERE (ID NOT IN
          (SELECT TOP 页大小*页数 id
         FROM 表
         ORDER BY id))
ORDER BY ID

페이징 솔루션 2: (보다 큰 ID 사용 및 SELECT TOP 페이징)

SELECT TOP 页大小 *
FROM TestTable
WHERE (ID >
          (SELECT MAX(id)
         FROM (SELECT TOP 页大小*页数 id
                 FROM 表
                 ORDER BY id) AS T))
ORDER BY ID

페이징 솔루션 3: (SQL 커서 저장 프로시저 페이징 사용)

create  procedure XiaoZhengGe
@sqlstr nvarchar(4000), --查询字符串
@currentpage int, --第N页
@pagesize int --每页行数
as
set nocount on
declare @P1 int, --P1是游标的id
 @rowcount int
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
select ceiling(1.0*@rowcount/@pagesize) as 总页数--,@rowcount as 总行数,@currentpage as 当前页 
set @currentpage=(@currentpage-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@currentpage,@pagesize 
exec sp_cursorclose @P1
set nocount off

테스트 결과:

테스트는 모두 페이지당 10개 항목이며, 세 숫자는 세 가지 솔루션이 결과를 생성하는 데 걸리는 시간(초)입니다.

2페이지: 18, 10, 29

페이지 500: 12, 8, 21

페이지 50000: 16, 18, 22

페이지 500000: 24, 16, 22

이 테스트의 주요 목적은 대용량 데이터의 여러 부분에 대한 페이지 넘기기 효율성을 테스트하는 것입니다. 선형적인 결과여야 한다고 생각했는데 변화가 이상하다는 것을 발견했습니다. 여러번 테스트해본 결과 1~2초 이내로 오류가 나는 것으로 추정됩니다. SQL Server 역시 위치에 따른 페이지 넘김에 최적화되어 있는 것으로 추정됩니다. 쿼리 분석을 살펴본 후 주요 비용은 여전히 ​​기본 키인 order by입니다. 기본 키가 아니거나 문자열인 경우 속도가 느려질 수 있습니다.

그 외 바쁜 일들이 있어서 더 이상의 테스트는 하지 않았습니다. 관심 있는 친구들은 100,000개의 항목, 인덱스, 문자열 내용으로 다양한 테스트를 계속할 수 있습니다.

위 내용은 세 가지 페이징 방법의 효율성에 대한 간단한 테스트의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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