sql分页存储过程疑惑:Row_Number与临时表哪个好?

  今天在博客园溜达,在园子里看到一篇文章:http://kb.cnblogs.com/page/124787/

  该文章中提到一个观点:如下截图

sql分页存储过程疑惑:Row_Number与临时表哪个好?

对于之前一直看到网上对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 发现执行时间没有多大区别。

望赐教,到底哪种好呢?会不会我存储过程写的不对呢?哈哈。。。

你可能感兴趣的:(row_number)