sql分页存储过程疑惑:Row_Number与临时表哪个好?
今天在博客园溜达,在园子里看到一篇文章:http://kb.cnblogs.com/page/124787/
该文章中提到一个观点:如下截图
对于之前一直看到网上对Sql2005新特性 Row_Number函数对分页的推崇,我就随便写了两个存储过程测试了一下,测试数据为十万条,发现查询所耗时间没有多大差距。
第一种方案:Row_Number函数分页
ALTER PROCEDURE [dbo].[Sp_Paging_RowNumber] --exec Sp_Paging_RowNumber 10,50 @pagenum int =1, @pagesize int=1 AS BEGIN SET NOCOUNT ON; SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY id DESC) AS rownum, id, [name] ,[password] FROM test1) AS D WHERE rownum BETWEEN (@pagenum-1)*@pagesize+1 AND @pagenum*@pagesize END
第一种方案:临时表分页
ALTER PROCEDURE [dbo].[Sp_Paging_TempTable] --exec Sp_Paging_TempTable 10 ,50 @PageIndex INT , @PageSize INT AS BEGIN SET NOCOUNT ON; DECLARE @StartIndex INT DECLARE @EndIndex INT SET @StartIndex = @PageSize * ( @PageIndex - 1 ) + 1 SET @EndIndex = @PageSize * @PageIndex SELECT * INTO #TEMP FROM test2 SELECT * FROM #Temp WHERE id >= @StartIndex AND id <= @EndIndex DROP TABLE #Temp SET NOCOUNT OFF END
之后,我建立了两张测试数据表,test1和test2,字段都是相同的自增主键id,name,password,分别插入相同的十万条数据。
然后分别执行exec Sp_Paging_TempTable 10 ,50与exec Sp_Paging_RowNumber 10,50 发现执行时间没有多大区别。
望赐教,到底哪种好呢?会不会我存储过程写的不对呢?哈哈。。。