SQLSERVER分页查询关于使用Top方式和row_number()解析函数的不同
select top 40 id from [TCCLine].[dbo].[CLine_CommonImage] order by id
)
order by id
结果为:
Sql Sever 2005及以上版本,多了个分页查询方法:
/*
* firstIndex:起始索引
* pageSize:每页显示的数量
* orderColumn:排序的字段名
* SQL:可以是简单的单表查询语句,也可以是复杂的多表联合查询语句
*/
select top pageSize o.* from (select row_number() over(order by orderColumn) as rownumber,* from(SQL) as o where rownumber firstIndex;
例如:
select top 10 numComImg.* from
( select row_number() over(order by id asc) as rownumber,* from (select * FROM [TCCLine].[dbo].[CLine_CommonImage]) as comImg)
as numComImg where rownumber 40
结果:
这两个方法,就仅仅是多了一列 rewnumber 吗?当然不是,来看下内部差别吧:
在两个SQL上,分别加入以下SQL,并使用MS的“包括执行计划”,便于查看执行详情:
SET STATISTICS TIME ON
GO
要执行的SQL:
SET STATISTICS TIME ON
GO
select top 10 numComImg.* from
( select row_number() over(order by id asc) as rownumber,* from (select * FROM [TCCLine].[dbo].[CLine_CommonImage]) as comImg)
as numComImg where rownumber 40
SET STATISTICS TIME ON
GO
select top 10 * 10 为页大小
from [TCCLine].[dbo].[CLine_CommonImage]
where id not in
(
40是这么计算出来的:10*(5-1)
页大小*(查询第几页-1)
select top 40 id from [TCCLine].[dbo].[CLine_CommonImage] order by id
)
order by id
执行之后,查看执行计划:
看得出,两个同样功能的SQL,执行时,使用 row_number() 的,要比是用 纯TOP方式的,查询开销少得多,上图显示 28:72,纯top方式,使用了两次聚集扫描。
再来看下执行时间信息:
row_number()方式的:
纯top方式:
相比之下,还是row_number()解析函数效率比较高写。
以上所述是小编给大家分享的SQLSERVER分页查询关于使用Top方式和row_number()解析函数的不同,希望对大家有所帮助。
我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 SQLSERVER分页查询关于使用Top方式和row_number()解析函数的不同
相关文章
- SQLServer 错误 41359 当数据库选项 READ_COMMITTED_SNAPSHOT 设置为 ON 时,使用 COMMITTED 隔离级别访问内存优化表的查询不能访问基于磁盘的表。 使用表提示(例如 WITH (SNAPSHOT))为内存优化表提供一种支持的隔离级别。 故障 处理 修复 支持远程
- 清理使用SQL Server数据库:实现高效的日志清理(sqlserver数据库日志)
- 使用SQL Server 实现数据库管理(简述sqlserver)
- 使用SQLServer创建数据库表格(用sqlserver建表)
- 新版SQLServer:激发更高数据处理能力(新版sqlserver)
- 使用SQLServer驱动JAR解决数据库连接问题(sqlserver驱动jar)
- 法SQLServer中的乘法操作简单介绍(sqlserver里的乘)
- SQL Server 谓词短语的使用与应用(sqlserver 谓词)
- 优化使用最佳实践优化SQLserver表容量(sqlserver表容量)
- 基于SQL Server的表别名使用方法(sqlserver表别名)
- 索引SQLserver索引聚类技术提升数据库性能(sqlserver聚类)
- 查询基于SQLServer的联表查询技术实战(sqlserver联表)
- 数据库技术:SQLServer中的累加列(sqlserver累加列)
- 拥抱正版,使用SQLServer稳步提升效率(sqlserver 正版)
- 询使用SQL Server快速查询信息(sqlserver查)
- 玩转SQLServer:方块拼图游戏的乐趣(sqlserver方块)
- 使用SQLServer快速操作表(sqlserver操作表)
- 使用SQL Server的微整型技术优化数据库(sqlserver微整型)
- 使用SQL Server,挑战有多大?(sqlserver很难吗)
- SQL Server中的常量使用简介(sqlserver 常量)
- SQL Server数据库查询中使用的细节(sqlserver尖括号)
- 必须的使用SQL Server,必须先创建实例(sqlserver实例是)
- 使用SQL Server字节集让它更安全(sqlserver字节集)
- 查询在SQLServer中高效查询大表的小技巧(sqlserver 大表)
- 使用SQL Server进行外部查询的指南(sqlserver外查询)
- 使用SQLServer变量名更有效率(sqlserver变量名)
- 查询使用SQL Server即席查询,实现快速精准的数据搜索(sqlserver即席)
- 如何为SQLServer中的表加以区分?(sqlServer区分表)
- 掌握SQLServer列信息,做到更好的数据处理(sqlserver列信息)
- 使用SQLserver实现高效字词搜索(sqlserver 分词)
- 搜寻解决Sqlserver写表速度过慢之道(sqlserver写表慢)
- 查询使用SQL Server实现完整关联查询(sqlserver全关联)
- 使用SqlServer主ID实现数据管理(sqlserver主id)
- 使用SQLServer全局变量的优势(sqlserver全局变量)
- 使用远程SQL Server时,性能慢的提示(远程sqlserver慢)