zoukankan      html  css  js  c++  java
  • 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 发现执行时间没有多大区别。

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

  • 相关阅读:
    能量石
    Journey among Railway Stations —— 1J
    金明的预算方案
    css学习
    实验七
    计算圆的面积和窗体的跳转
    Android子菜单和选项菜单与上下文菜单的实现
    Android 对话框(Dialog)
    /etc/init.d 与 service 的 关系 。。。。。。。
    Linux && Aix 下 常用命令 dd
  • 原文地址:https://www.cnblogs.com/lhmlyx2723356/p/2682486.html
Copyright © 2011-2022 走看看