데이터 양이 많고 위치가 다른 페이지를 비교해봤습니다.
테이블 만들기:
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, 'FirstName_XXX','LastName_XXX','Country_XXX','Note_XXX') 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!