SQL Server数据库分页查询
原文链接: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数据库分页查询相关推荐
- 浅谈SQL Server数据库分页
数据库分页是老生常谈的问题了.如果使用ORM框架,再使用LINQ的话,一个Skip和Take就可以搞定.但是有时由于限制,需要使用存储过程来实现.在SQLServer中使用存储过程实现分页的已经有很多 ...
- sql server数据库 T-SQL查询语句(基本篇)
接上篇sql server 数据库增删改查(库与表) 删除数据 delete 表名 where 查询条件 T-sql查询语句 T-sql语句 增强版的sql语句,增加了更多的函数应用,流程控制,变量说 ...
- SQL Server数据库的查询、排序
查询的对象是表,关键字是select 图表 1 查询的是整张表的数据 注意:在表名前一个要加上模式名,不然就报对象名无效的错误(见图2)为什么会报这种错误了,主要是表名前面没有模式名,然后表就获取 ...
- .bat文件实现对Sql Server数据库的查询
想做一个数据库的小工具,所以就想到了用脚本实现简单的数据库查询 话不多说,现在贴上代码 @ECHO OFF SET dbHost= 192.168.1.125 SET dbUserID=USERID ...
- sql server语法——分页查询
一.语法 方案一:使用top分页 select top 页码大小 查询字段 from 表名 where 主键 not in (select top (页码大小 * 当前页(以0开始))查询字段 fro ...
- SQL Server数据库简单查询
1.查询的格式:SELECT 字段名称 FROM 表名 [WHERE 条件表达式] [ORDER BY 字段名称 ASC(升序)|DESC(降 序)]例如:SELECT *FROM USER [查询标 ...
- 在SQL Server中分页结果的最佳方法是什么
如果您还希望获得结果总数(在进行分页之前),那么在SQL Server 2000.2005.2008.2012中对结果进行分页的最佳方法是(性能明智的)? #1楼 最终, Microsoft SQL ...
- Sql Server 2005 分页
摘要:Sql Server 分页查询sql! Sql Server 2005分页查询数据,适用于手机端和服务器端交互 一:Dao代码: /*** 分页查询研讯分类下的新闻列表*/@Overridepu ...
- 【转】在SQL Server中通过SQL语句实现分页查询
在SQL Server中通过SQL语句实现分页查询 2008年01月06日 星期日 12:28 建立表: CREATE TABLE [TestTable] ( [ID] [int] IDENTITY ...
- SQL Server数据库查询速度慢的原因和解决方法
SQL Server数据库查询速度慢的原因和解决方法 参考文章: (1)SQL Server数据库查询速度慢的原因和解决方法 (2)https://www.cnblogs.com/MyChange/p ...
最新文章
- 前端小项目之在线便利贴
- Highlight – 代码高亮html输出软件
- python网络爬虫权威指南 豆瓣_豆瓣Python大牛写的爬虫学习路线图,分享给大家!...
- 标准库类型string的基本功能和使用
- The file or directory to be published does not exist: /data/vendor/bower/jquery/dist
- hybris backoffice 产品属性和sample data的对应关系
- Python3 From Zero——{最初的意识:007~函数}
- 洛谷——P1319 压缩技术
- 一些提高生产力的 Linux 命令和技巧
- 将Excel列表数据转换成html代码
- 【人工智能数学基础(五)】信息论
- 宏杉科技高端存储再获认可 成功中标国家电网集采
- unity for 易接IOSsdk
- MFC控件内字体大小随控件改变
- 六月我在工作中蜕变,勤奋小人打架终于赢了
- 360系统急救箱用在服务器上,360系统急救箱打开失败的处理操作
- 普通用户强制修改root密码
- 隐私保护 举例_完美保护隐私
- 小刚明白锻炼的重要性,每天坚持走10000步。这一天,他已经走了一些步,想知道还要走多少步才能完成这一天的锻炼任务。请你帮帮他。
- SDN的深入思考(1):SDN的核心本质到底是什么?