最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

SQLSERVER分页查询关于使用Top方式和row_number()解析函数的不同

来源:动视网 责编:小OO 时间:2020-11-09 07:02:20
文档

SQLSERVER分页查询关于使用Top方式和row_number()解析函数的不同

临近春节,心早已飞了不在工作上了,下面小编给大家整理些数据库的几种分页查询。Sql Sever 2005之前版本。select top 页大小 *from 表名where id not in(select top 页大小*(查询第几页-1) id from 表名 order by id)order by id 。例如。
推荐度:
导读临近春节,心早已飞了不在工作上了,下面小编给大家整理些数据库的几种分页查询。Sql Sever 2005之前版本。select top 页大小 *from 表名where id not in(select top 页大小*(查询第几页-1) id from 表名 order by id)order by id 。例如。


临近春节,心早已飞了不在工作上了,下面小编给大家整理些数据库的几种分页查询。

Sql Sever 2005之前版本:

select top 页大小 *
from 表名
where id not in
(
select top 页大小*(查询第几页-1) id from 表名 order by id
)
order by id 

例如:

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 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()解析函数的不同,希望对大家有所帮助。

您可能感兴趣的文章:

  • SpringMVC4 + MyBatis3 + SQL Server 2014整合教程(含增删改查分页)
  • SQL Server使用row_number分页的实现方法
  • 五种SQL Server分页存储过程的方法及性能比较
  • SQL Server 分页查询通用存储过程(只做分页查询用)
  • SQL Server 分页编号的另一种方式【推荐】
  • 文档

    SQLSERVER分页查询关于使用Top方式和row_number()解析函数的不同

    临近春节,心早已飞了不在工作上了,下面小编给大家整理些数据库的几种分页查询。Sql Sever 2005之前版本。select top 页大小 *from 表名where id not in(select top 页大小*(查询第几页-1) id from 表名 order by id)order by id 。例如。
    推荐度:
    标签: 使用 sql top
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top