zoukankan      html  css  js  c++  java
  • 一个高效的分页存储过程

    原文链接

    最近在做一个几百万条数据的分页查询,研究了各种方案,在本机上用项目的实际数据库做测试,测试过程 is very 痛苦,不堪回首ing。现在废话不多说,直接上结果,相信这也是大多数搜索答案的人最愿意看的方式。  以下是存储过程的代码:
    [url=][/url]
    CREATE PROCEDURE [dbo.[P_GridViewPager (
        @recordTotal INT OUTPUT,
                --输出记录总数     @viewName VARCHAR(800),
                 --表名     @fieldName VARCHAR(800) = '*',
                 --查询字段     @keyName VARCHAR(200) = 'Id',
                 --索引字段     @pageSize INT = 20,
                 --每页记录数     @pageNo INT =1,
                --当前页     @orderString VARCHAR(200),
                --排序条件     @whereString VARCHAR(800) = '1=1'
              --WHERE条件)
    AS
    BEGIN
          DECLARE @beginRow INT      
          DECLARE @endRow INT
          DECLARE @tempLimit VARCHAR(200)
          DECLARE @tempCount NVARCHAR(1000)
          DECLARE @tempMain VARCHAR(1000)
          --declare @timediff datetime
                set nocount on
            --select @timediff=getdate() --记录时间
           SET @beginRow = (@pageNo - 1) * @pageSize    + 1
           SET @endRow = @pageNo * @pageSize
           SET @tempLimit = 'rows BETWEEN ' + CAST(@beginRow AS VARCHAR) +' AND '+CAST(@endRow AS VARCHAR)

             --输出参数为总记录数
          SET @tempCount = 'SELECT @recordTotal = COUNT(*) FROM (SELECT '+@keyName+' FROM '+@viewName+' WHERE '+@whereString+') AS my_temp'
          EXECUTE sp_executesql @tempCount,N'@recordTotal INT OUTPUT',@recordTotal OUTPUT

          --主查询返回结果集
          SET @tempMain = 'SELECT * FROM (SELECT ROW_NUMBER() OVER (order by '+@orderString+') AS rows ,'+@fieldName+' FROM '+@viewName+' WHERE '+@whereString+') AS main_temp WHERE '+@tempLimit            --PRINT @tempMain      
           EXECUTE (@tempMain)
          --select datediff(ms,@timediff,getdate()) as 耗时
            set nocount off
    END
    GO

      完工!

  • 相关阅读:
    cnblog项目--20190309
    django js引入失效问题
    Python老男孩 day16 函数(六) 匿名函数
    Python老男孩 day16 函数(五) 函数的作用域
    Python老男孩 day15 函数(四) 递归
    Python老男孩 day15 函数(三) 前向引用之'函数即变量'
    Python老男孩 day15 函数(二) 局部变量与全局变量
    Python老男孩 day14 函数(一)
    Python老男孩 day14 字符串格式化
    Python老男孩 day14 集合
  • 原文地址:https://www.cnblogs.com/wosinren/p/3568085.html
Copyright © 2011-2022 走看看