最快的存储过程分页 50W
过程一:
select top N条记录 * from 文章表 where id not in(select top M条记录 id from 文章表 order by id desc ) order by id desc
过程二:
select top N条记录 * from 文章表 where id <(select min(id) from (select top M条记录 id from 文章表 order by id desc ) as tblTmp) order by id desc
--简单通用
CREATE PROCEDURE [dbo].[PageView]
@select VARCHAR(max),
@CurrentPage INT,
@PageSize INT
AS
BEGIN
declare @sql NVARCHAR(max)
DECLARE @RecordCurrent INT
DECLARE @PageCount INT
DECLARE @RecordCount INT
SET NOCOUNT ON
set @sql='select @RecordCount=count(*) from ('+@select+') a'
exec sp_executesql @sql,N'@RecordCount int output',@RecordCount output
SET @PageCount=(@RecordCount+@PageSize-1)/@PageSize
IF ISNULL(@CurrentPage,0)<1
SET @CurrentPage=1
ELSE if ISNULL(@CurrentPage,0)>@PageCount
SET @CurrentPage=@PageCount
SELECT @CurrentPage AS CurrentPage,@RecordCount AS RecordCount,@PageSize AS PageSize,@PageCount AS PageCount
set @sql='select * from ('+@select+') a where rownumber between '+cast((@CurrentPage-1)*@PageSize+1 as varchar)+' and '+cast(@CurrentPage*@PageSize as varchar)
exec (@sql)
END
--使用not in 方式的存储过程
create PROCEDURE GetPageDataByNotIn
@PageIndex int,/**//*当前页数*/
@PageSize int/**//*每页大小*/
AS
declare @starttime datetime
set @starttime=getdate()
IF @PageIndex > 0
BEGIN
set nocount on;
DECLARE @PageLowerBound int
DECLARE @StartID int
DECLARE @sql varchar(225)
SET @PageLowerBound = @PageSize * (@PageIndex-1)
IF @PageLowerBound<1
SET @PageLowerBound=1
print @PageLowerBound
select top (@PageSize) * from table where [ar_id] not in (select top ((@PageSize)*(@PageIndex-1)) ar_id from table )
EXEC(@sql)
set nocount off;
END
print '耗时='+convert(varchar(30),datediff(ms,@starttime,getdate()))
-------------------------------------------------------------------------------------------------------
--使用ROWCOUNT的分页存储过程
create PROCEDURE GetPageData
@PageIndex int,/**//*当前页数*/
@PageSize int/**//*每页大小*/
AS
declare @starttime datetime
set @starttime=getdate()
IF @PageIndex > 0
BEGIN
set nocount on;
DECLARE @PageLowerBound int
DECLARE @StartID int
DECLARE @sql varchar(225)
SET @BeginIndex = @PageSize * (@PageIndex-1)
IF @BeginIndex<1
SET @BeginIndex=1
SET ROWCOUNT @BeginIndex
SELECT @StartID = [ar_id] FROM table ORDER BY ar_id
print @StartID
SET ROWCOUNT 0
SET @sql='select top '+str(@PageSize) +' * from table where [ar_id]>='+ str(@StartID) +' ORDER BY [ar_id] '
EXEC(@sql)
set nocount off;
END
print '耗时='+convert(varchar(30),datediff(ms,@starttime,getdate()))
-----------------------------------------------------------------------------------------------------
测试查询一张有100W条数据的表table,每页显示10条数据
存储过程 第1页 第10页 第100页 第1000页 第5000页
GetPageDataByNotIn 0 0 126 13530 等了2分多钟没耐性了....
GetPageData 0 0 0 16 76
------------------------------------------------------------------------------------------------------------
最后使用的存储过程(推荐):
create PROCEDURE GetPageData
(
@TableName varchar(30),--表名称
@IDName varchar(20),--表主键名称
@PageIndex int,--当前页数
@PageSize int--每页大小
)
AS
IF @PageIndex > 0
BEGIN
set nocount on
DECLARE @PageLowerBound int,@StartID int,@sql nvarchar(225)
SET @PageLowerBound = @PageSize * (@PageIndex-1)
IF @PageLowerBound<1
SET @PageLowerBound=1
SET ROWCOUNT @PageLowerBound
SET @sql=N'SELECT @StartID = ['+@IDName+'] FROM '+@TableName+' ORDER BY '+@IDName
exec sp_executesql @sql,N'@StartID int output',@StartID output
SET ROWCOUNT 0
SET @sql='select top '+str(@PageSize) +' * from '+@TableName+' where ['+@IDName+']>='+ str(@StartID) +' ORDER BY ['+@IDName+'] '
EXEC(@sql)
set nocount off
END
转载于:https://www.cnblogs.com/dingxiaowei/archive/2012/09/21/3058803.html
最快的存储过程分页 50W相关推荐
- 常见存储过程分页PK赛——简单测试分析常见存储过程分页速度
数据的分页是我们再熟悉不过的功能了,各种各样的分页方式层出不穷.今天我把一些常见的存储过程分页列出来,再简单地测一下性能,算是对知识的总结,也是对您好想法的抛钻引玉.废话不多说,开始吧~~ 1.首先建 ...
- 超经典的存储过程分页 ;-) 引自CSDN网友所作
主 题: 好东西分享哟!! 利用SqlServer内部存储过程实现快速方便的分页 作 者: zxbyhcsdn (沙子) Blog 等 级: 信 誉 值: 97 所属社区: MS-SQL ...
- (转)几种常用存储过程分页方法
我们先给出几种主要的分页方法和核心语句,然后直接给出结论,有兴趣的读者可以看看后面的数据 几种常用存储过程分页方法 TopN方法 select Top(@PageSize) from TableNam ...
- [百万级]通用存储过程.分页存储过程
/* 名称:spAll_ReturnRows 输入: 输出: 调用: EXEC spAll_ReturnRows 'SELECT * FROM 表名', 页号, 返回记录数, '主键', ...
- mysql通用分页_MySQL海量数据的通用存储过程分页代码
本节主要内容: MySQL海量数据的通用存储过程分页代码 本节为大家分享一例mysql 通用存储过程分页.海量数据分页的代码. 1,测试用的表结构: 复制代码 代码示例: CREATE TABLE I ...
- MS SQLSERVER通用存储过程分页
最近在面试的时候,遇到个奇葩的秃顶老头面试官. 问:写过存储过程分页吗? 答:没写过,但是我知道分页存储的原理,我自己也写过,只是在工作中没写过. 问:那你这么多年工作中就没写过吗? 答:的确没写过, ...
- sql 存储过程 分页
---存储过程:分页,获得第@endrecord-@num+1条到第@endrecord条记录的研报信息 IF exists (select * from SysObjects where name= ...
- 非存储过程分页- 前台分页样式和控件
非存储过程分页- 前台分页样式和控件 一. DAL /// ///分页sql /// public DataTable GetUserAndError(int pageSize, int page ...
- SQL存储过程分页(通用的拼接SQL语句思路实现)
多表通用的SQL存储过程分页 案例一: USE [Community] GO/****** Object: StoredProcedure [dbo].[Common_PageList] Script ...
最新文章
- 【Linux基础】文件处理实例
- python写错了怎么更改-Python中修改字符串的四种方法
- GRE核心词汇助记与精练-List10感觉,感情
- 敏感词过滤的php代码,php实现敏感词过滤(Trie树)
- MyEclipse下安装MyBatis Generator代码反向生成工具
- CKEditor的使用方法
- mysql客户端程序介绍
- 【Elasticsearch】es 别名可写 索引可写 傻傻分不清
- python 遍历文件夹
- Zookeeper Java客户端搭建
- html svg 编辑器
- 关于ATmega328P和ATmega328PB中16位定时器的使用
- 西门子阀门定位器安装教程来啦,不会安装的宝贝们仔细看看咯!
- Windows漏洞补丁更新网址
- 用phpexcel导入导出文件
- 工作流学习2(书本)
- STM32延时函数的四种方法
- Java-翁恺进阶 城堡游戏的前世今生
- cad2020卸载工具_2020年您应该拥有的12个自由职业者设计工具
- 【java】Integer == Integer?
热门文章
- 概述--Nginx集成Vcenter 6.X HTML Console系列之 1--(共4)
- javascript中字符串常用方法
- python-组合数据类型
- 9种对抗电脑辐射的方法
- 用python批量下载modis数据的速度怎么样_MODIS数据的简介和下载(五)——应用密钥的Python脚本下载...
- Redis(三)主从复制实现高可用(redis—sentinel)
- Python中的问卷调查(华为机测题)
- Java中抽象类和接口的区别(来源二,原始来源不明确)
- VC++6.0 单步调试
- Kava Labs已上线Trust Wallet专用桥接器以提供DeFi产品服务