Offset 与 Rownumber 性能浅析
OFFSET是SqlServer2012的最新语法,它语法简洁,只一行代码就搞定分页。谈及分页,一定会有比对,那么它比与SqlServer2000出现的RowNumber性能如何呢,下面来做简单的测试。
为保证公平,两者测试采用一张表,且都是在取一次数据后进行比较。
向测试表中插入一百万条数据

数据表结构如图:

OffSet方式:
语法:

OFFSET的方式同样也依赖于ORDER BY,其语法简洁,一句搞定。
执行时间:

执行计划:

详细执行计划:

Rownumber方式:
语法:

执行时间:

执行计划:

详细执行计划:

比较:
- IO上两者一致,逻辑读32,其他都为0,系数皆为5.761643.
- CPU上,Offset占据优势,性能有所提高。
- 查询上,Rowbumer 聚合索引扫描为97%,与Offset基本持平。
- Rownumer 的执行计划有六个步骤,需要返回总行数8000多行,而Offset只有三个执行步骤,只需2000多行。
- 语法上.Offset更简洁。
总结:Offset无论性能和语法都要优于Rownumer,但性能提升并不明显,使用Rownumer并无性能上的影响。