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 发现执行时间没有多大区别。

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

posted @ 2012-09-12 22:10  Mr.Ming  阅读(1313)  评论(1编辑  收藏  举报