Offset 与 Rownumber 性能浅析

  OFFSET是SqlServer2012的最新语法,它语法简洁,只一行代码就搞定分页。谈及分页,一定会有比对,那么它比与SqlServer2000出现的RowNumber性能如何呢,下面来做简单的测试。

  为保证公平,两者测试采用一张表,且都是在取一次数据后进行比较。

  向测试表中插入一百万条数据

 

 

  数据表结构如图:

 

 

 

  OffSet方式:

  语法:

 

 

 

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

  执行时间:

 

 

  执行计划:

 

 

  详细执行计划:

 

 

 

  Rownumber方式:

  语法:

 

 

  执行时间:

 

 

  执行计划:

 

 

  详细执行计划:

 

 

 

比较:

  1. IO上两者一致,逻辑读32,其他都为0,系数皆为5.761643.
  2. CPU上,Offset占据优势,性能有所提高。
  3. 查询上,Rowbumer 聚合索引扫描为97%,与Offset基本持平。
  4. Rownumer 的执行计划有六个步骤,需要返回总行数8000多行,而Offset只有三个执行步骤,只需2000多行。
  5. 语法上.Offset更简洁。

 

总结:Offset无论性能和语法都要优于Rownumer,但性能提升并不明显,使用Rownumer并无性能上的影响。