原文链接:SQLServer数据库分页查询

一、创建表结构

CREATE TABLE [dbo].[a]([id] [int] NOT NULL,[name] [nvarchar](50) NULL,[age] [int] NULL)

二、添加测试数据

declare @i int
set @i=1
while(@i<10000)
begininsert into a select @i,left(newid(),7),12set @i += 1
end

三、分页sql,下面例子是每页10条,取第31-40条数据。

--方法一:Order by
Select Top (40-31+1)  * From a Where ID in (Select Top 40 ID From a Order by ID  ) Order by ID Desc--方法二:not in/top
select top 10 * from a where id not in (select top 30 id from a order by id) order by id--方法三:not exists
select top 10 * from a where not exists (select 1 from (select top 30 id from a order by id)a1 where a1.id=a.id) order by id--方法四:max/top
select top 10 * from a where id>(select max(id) from (select top 30 id from a order by id)a1) order by id--方法五:row_number()
select top 10 * from (select row_number()over(order by id)rownumber,* from a)a1 where rownumber>30
select * from (select row_number()over(order by id)rownumber,* from a) a1 where rownumber>30 and rownumber<41
select * from (select row_number()over(order by id)rownumber,* from a)a1 where rownumber between 31 and 40--方法六:row_number() 变体,不基于已有字段产生记录序号,先按条件筛选以及排好序,再在结果集上给一常量列用于产生记录序号
select *
from (select row_number()over(order by id)rownumber,* from (select top 40 * from a where 1=1 order by id)a
)b where rownumber>30

四、SQL语句效率测试

declare @begin_date datetime
declare @end_date datetime
select @begin_date = getdate()<.....YOUR CODE.....>select @end_date = getdate()
select datediff(ms,@begin_date,@end_date) as '毫秒'

1万:基本感觉不到差异

10万:

五、结论

1.max/top,ROW_NUMBER()都是比较不错的分页方法。相比ROW_NUMBER()只支持sql2005及以上版本,max/top有更好的可移植性,能同时适用于sql2000,access。

2.not exists感觉是要比not in效率高一点点。

3.ROW_NUMBER()的3种不同写法效率看起来差不多。

SQL Server数据库分页查询相关推荐

  1. 浅谈SQL Server数据库分页

    数据库分页是老生常谈的问题了.如果使用ORM框架,再使用LINQ的话,一个Skip和Take就可以搞定.但是有时由于限制,需要使用存储过程来实现.在SQLServer中使用存储过程实现分页的已经有很多 ...

  2. sql server数据库 T-SQL查询语句(基本篇)

    接上篇sql server 数据库增删改查(库与表) 删除数据 delete 表名 where 查询条件 T-sql查询语句 T-sql语句 增强版的sql语句,增加了更多的函数应用,流程控制,变量说 ...

  3. SQL Server数据库的查询、排序

    查询的对象是表,关键字是select 图表 1   查询的是整张表的数据 注意:在表名前一个要加上模式名,不然就报对象名无效的错误(见图2)为什么会报这种错误了,主要是表名前面没有模式名,然后表就获取 ...

  4. .bat文件实现对Sql Server数据库的查询

    想做一个数据库的小工具,所以就想到了用脚本实现简单的数据库查询 话不多说,现在贴上代码 @ECHO OFF SET dbHost= 192.168.1.125 SET dbUserID=USERID ...

  5. sql server语法——分页查询

    一.语法 方案一:使用top分页 select top 页码大小 查询字段 from 表名 where 主键 not in (select top (页码大小 * 当前页(以0开始))查询字段 fro ...

  6. SQL Server数据库简单查询

    1.查询的格式:SELECT 字段名称 FROM 表名 [WHERE 条件表达式] [ORDER BY 字段名称 ASC(升序)|DESC(降 序)]例如:SELECT *FROM USER [查询标 ...

  7. 在SQL Server中分页结果的最佳方法是什么

    如果您还希望获得结果总数(在进行分页之前),那么在SQL Server 2000.2005.2008.2012中对结果进行分页的最佳方法是(性能明智的)? #1楼 最终, Microsoft SQL ...

  8. Sql Server 2005 分页

    摘要:Sql Server 分页查询sql! Sql Server 2005分页查询数据,适用于手机端和服务器端交互 一:Dao代码: /*** 分页查询研讯分类下的新闻列表*/@Overridepu ...

  9. 【转】在SQL Server中通过SQL语句实现分页查询

    在SQL Server中通过SQL语句实现分页查询 2008年01月06日 星期日 12:28 建立表: CREATE TABLE [TestTable] ( [ID] [int] IDENTITY ...

  10. SQL Server数据库查询速度慢的原因和解决方法

    SQL Server数据库查询速度慢的原因和解决方法 参考文章: (1)SQL Server数据库查询速度慢的原因和解决方法 (2)https://www.cnblogs.com/MyChange/p ...

最新文章

  1. 前端小项目之在线便利贴
  2. Highlight – 代码高亮html输出软件
  3. python网络爬虫权威指南 豆瓣_豆瓣Python大牛写的爬虫学习路线图,分享给大家!...
  4. 标准库类型string的基本功能和使用
  5. The file or directory to be published does not exist: /data/vendor/bower/jquery/dist
  6. hybris backoffice 产品属性和sample data的对应关系
  7. Python3 From Zero——{最初的意识:007~函数}
  8. 洛谷——P1319 压缩技术
  9. 一些提高生产力的 Linux 命令和技巧
  10. 将Excel列表数据转换成html代码
  11. 【人工智能数学基础(五)】信息论
  12. 宏杉科技高端存储再获认可 成功中标国家电网集采
  13. unity for 易接IOSsdk
  14. MFC控件内字体大小随控件改变
  15. 六月我在工作中蜕变,勤奋小人打架终于赢了
  16. 360系统急救箱用在服务器上,360系统急救箱打开失败的处理操作
  17. 普通用户强制修改root密码
  18. 隐私保护 举例_完美保护隐私
  19. 小刚明白锻炼的重要性,每天坚持走10000步。这一天,他已经走了一些步,想知道还要走多少步才能完成这一天的锻炼任务。请你帮帮他。
  20. SDN的深入思考(1):SDN的核心本质到底是什么?

热门文章

  1. word里双横线怎么打_word双下划线怎么打出来
  2. 【Office】Word空格无法添加下划线
  3. win10忘记账户密码完美解决方案
  4. html透明背景字体不透明,css3背景透明,文字不透明
  5. Zotero及部分常用插件安装和使用教程
  6. QT开发环境简介、安装以及搭建VS2019环境
  7. 领导的这些职场暗语,你一定要知道!
  8. 巨头争云存储祭免费旗 或重演视频业消耗战
  9. 摄影基础知识(光圈、快门、感光度等)
  10. bt python_bt宝塔 安装个python失败? 阿里云轻量香港