SQL Server两种分页性能比较

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server两种分页性能比较相关的知识,希望对你有一定的参考价值。

参考技术A SQL Server 在2012版本中 提供了一种新的分页方式 fetch next
相比以前开窗函数来看有什么区别呢? 我用 sql server 系统表产生笛卡尔积 做了一个测试
先来看一下数据量

在翻页数量不大的时候的比较 第20页的时候的比较
1、开窗函数

2、fetch next

可以看出所花费的时间相当接近的,两者都是1.2s

我们把页数增大,再来看看区别 第200000页的时候比较

一个花了3.9s,一个花了1.6s
当随着页数的增加 可以看出 fetch next 分页的性能是优于开窗函数的。

所以当你是使用sql server2012及以上版本的时候,建议还是采用 fetch next 来进行分页吧。

SQL SERVER 分页查询 和 Inser 添加并返回Id

--第一种分页 
SELECT *
 FROM (
  select ROW_NUMBER() over(order by id) as rows,* from [dbo].[M_User]
 --WHERE Id>1  
  ) AS T where rows BETWEEN 0 AND 2

--第二种分页 需SQL SERVER 2012以上支持
select * from [M_Role]
order by Id  
offset 0 rows
fetch next 10 rows only ;
--执行Inser Into 并返回 Id

/* 返回为任何会话和任何作用域中的特定表最后生成的标识值。
IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。*/
--返回为任何会话和作用域中的特定表所生成的值。
SELECT IDENT_CURRENT(‘dbo.M_Role‘) AS ‘dbo.M_Role Max Id‘;

 

--返回为当前会话和当前作用域中的任何表最后生成的标识值
select SCOPE_IDENTITY() as id


INSERT INTO [TABLE_NAME] VALUES (*,*,*);SELECTSCOPE_IDENTITY() as id;
IDENT_CURRENT :返回为任何会话和任何作用域中的特定表最后生成的标识值。IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。

@@IDENTITY: 返回为当前会话的所有作用域中的任何表最后生成的标识值。

SCOPE_IDENTITY :返回为当前会话和当前作用域中的任何表最后生成的标识值

SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。

 

以上是关于SQL Server两种分页性能比较的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server分页的存储过程写法以及性能比较

sqlserver两种分页方法比较

Jsp页面,结果集分页和sql(top)分页的性能对比

SpringBoot+Mybatis-Plus两种分页方法

SQL Server的三种分页方式

Sql Server 常见的几种分页方式