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

临近春节,心早已飞了不在工作上了,下面小编给大家整理些数据库的几种分页查询。 sql sever 2005之前版本: select top 页大小 *

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

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

结果为:

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

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 

结果:

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

这两个方法,就仅仅是多了一列 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 

执行之后,查看执行计划:

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

看得出,两个同样功能的sql,执行时,使用 row_number() 的,要比是用 纯top方式的,查询开销少得多,上图显示 28:72,纯top方式,使用了两次聚集扫描。

再来看下执行时间信息:

row_number()方式的:

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

纯top方式:

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

相比之下,还是row_number()解析函数效率比较高写。

以上所述是小编给大家分享的sqlserver分页查询关于使用top方式和row_number()解析函数的不同,希望对大家有所帮助。

需要了解更多数据库技术:SQLSERVER分页查询关于使用Top方式和row_number()解析函数的不同,都可以关注数据库技术分享栏目—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/dtteaching/613746.html

(0)
上一篇 2021年5月19日
下一篇 2021年5月19日

精彩推荐