SQL SERVER2012新分页方式
SQL SERVER2012在ORDER BY 子句中加入了新元素offset,允许用户在排序完成的结果集中自定义输出行范围,大大简化了分页SQL的书写方式和效率。以下是与以前的两种分页方式的简单对比
从查询计划来看,2012的查询计划中,offset直接操作了top迭代器,分页计划十分简单,看起来也比后两种简单明了。
而在系统预估的查询开销中,OFFSET占9%,ROW_NUMBER占45%,TOP占47%(加起来101% -_-||),OFFSET占了绝对的优势。
在2008的更新中,我最喜欢的是MERGE,2012中就是OFFSET了。
博文地址
http://blog.csdn.net/guguda2008/article/details/7370398
use master
go
set nocount on
go
set showplan_text on
go
--2012的OFFSET分页方式
select number
from spt_values
where type='p'
order by number offset 10 rows fetch next 5 rows only;
go
--2005的ROW_NUMBER分页方式
select number from (
select number,row_number() over(order by number) as num from spt_values where type='p'
) t where num between 11 and 15
order by number asc
go
--2000的TOP分页方式
select number from (
select top 5 number from (
select top 15 number from spt_values where type='p' order by number asc
) t
order by number desc
) t
order by number asc
go
set showplan_text off
go
/*
StmtText
----------------------------------------------------------------------------------------------------------
select number
from spt_values
where type='p'
order by number offset 10 rows fetch next 5 rows only;
StmtText
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|--Top(OFFSET EXPRESSION:((10)),TOP EXPRESSION:((5)))
|--Index Scan(OBJECT:([mssqlsystemresource].[sys].[spt_values].[ix2_spt_values_nu_nc]), WHERE:(CONVERT(nchar(3),[mssqlsystemresource].[sys].[spt_values].[type],0)=N'p') ORDERED FORWARD)
StmtText
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
select number from (
select number,row_number() over(order by number) as num from spt_values where type='p'
) t where num between 11 and 15
order by number asc
StmtText
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|--Sort(ORDER BY:([mssqlsystemresource].[sys].[spt_values].[number] ASC))
|--Filter(WHERE:([Expr1005]>=(11) AND [Expr1005]<=(15)))
|--Top(TOP EXPRESSION:(CASE WHEN (15) IS NULL OR (15)<(0) THEN (0) ELSE (15) END))
|--Sequence Project(DEFINE:([Expr1005]=row_number))
|--Segment
|--Index Scan(OBJECT:([mssqlsystemresource].[sys].[spt_values].[ix2_spt_values_nu_nc]), WHERE:(CONVERT(nchar(3),[mssqlsystemresource].[sys].[spt_values].[type],0)=N'p') ORDERED FORWARD)
StmtText
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
select number from (
select top 5 number from (
select top 15 number from spt_values where type='p' order by number asc
) t
order by number desc
) t
order by number asc
StmtText
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|--Sort(ORDER BY:([mssqlsystemresource].[sys].[spt_values].[number] ASC))
|--Sort(TOP 5, ORDER BY:([mssqlsystemresource].[sys].[spt_values].[number] DESC))
|--Top(TOP EXPRESSION:((15)))
|--Index Scan(OBJECT:([mssqlsystemresource].[sys].[spt_values].[ix2_spt_values_nu_nc]), WHERE:(CONVERT(nchar(3),[mssqlsystemresource].[sys].[spt_values].[type],0)=N'p') ORDERED FORWARD)
*/从查询计划来看,2012的查询计划中,offset直接操作了top迭代器,分页计划十分简单,看起来也比后两种简单明了。
而在系统预估的查询开销中,OFFSET占9%,ROW_NUMBER占45%,TOP占47%(加起来101% -_-||),OFFSET占了绝对的优势。
在2008的更新中,我最喜欢的是MERGE,2012中就是OFFSET了。
博文地址
http://blog.csdn.net/guguda2008/article/details/7370398
...全文
相关推荐
浅析SQL Server的分页方式 ISNULL与COALESCE性能比较
这种方式可以结合视图使用,代码简洁明了,且在性能上与直接使用SQL查询语句相差无几。然而,从SQL Server 2012开始,引入了新的`OFFSET-FETCH`语法来简化分页操作。
SQL Server 2012使用Offset/Fetch Next实现分页数据查询
ROWS ONLY` 方法SQL Server 2012引入的新特性`OFFSET ... FETCH NEXT ... ROWS ONLY` 提供了一种更简洁的分页方式。
五种SQL Server分页存储过程的方法及性能比较
这种方法通常被认为是最高效的分页方式之一,但代码未给出。5. **利用`OFFSET/FETCH`语法** SQL Server 2012引入的新分页语法,它提供了更直观、高效的分页方式。
Server 2012 安装SQL Server 2012出现启用Windows 功能NetFx3时出错错误代码:-2146498298
通过挂载安装介质、以管理员方式运行 PowerShell、安装 NetFx3 功能、重启服务器和重新启动安装程序等步骤,可以成功解决该错误,从而完成 SQL Server 2012 的安装。
Windows Server 2012 + SQL Server 2016安装必读
Windows Server 2012 + SQL Server 2016 安装指南本文档提供了 Windows Server 2012 + SQL Server 2016 安装的详细指南,旨在帮助用户快速安装和配置这两个软件


新技术前沿
