【SQL 编程你也行】SQL Server分页性能分析


上一篇文件写的是分页方法,这一次要分析分页方法的性能。


这里不考虑表没有索引的情况,在分页id上都建有索引,表记录数为 432万条


1、把2个sql一起运行,先取第2页数据,看实际的执行计划以及查询开销百分比。

从下面的图可以看出,row_number方法占用了51%的开销,而offset方法占用了49%的开销,两者性能差不多。


【SQL 编程你也行】SQL Server分页性能分析_第1张图片


2、但是进一步分析:

SET STATISTICS IO ON

SET STATISTICS TIME ON

发现row_number方法逻辑扫描5次,占用时间52毫秒,而offset 方法却占用了92毫秒,又说明row_number方法速度似乎更快。


【SQL 编程你也行】SQL Server分页性能分析_第2张图片


3、取10000页。

从下图可以看出,2者的性能基本上一样,只是两者随着所取页数越来越靠后,速度有所放慢。

【SQL 编程你也行】SQL Server分页性能分析_第3张图片


4、取400000页。

虽然逻辑读取次数一样,但是offset分页方法优于row_number方法,占用时间上少了近一半,cpu时间少了三分之二。

【SQL 编程你也行】SQL Server分页性能分析_第4张图片


总结:

     从上面的分析可以看出,一开始在取第2页时速度很快,需要几十毫秒,当取第10000页时,需要100多毫秒,但当取第400000页的时候,offset的速度为1秒,而row_number的速度为2.6秒左右。

     虽然两种方法总体上,随着所取分页的偏移位置越来越大,总体速度是越来越慢,但是也可以看出offset方法的速度下降较慢,而row_number方法虽然一开始速度比offset快,但是之后的速度下降幅度较大,可以预见到随着所取分页的偏移越来越大,速度会加速下滑。

     由此看出offset分页方法的性能是更加稳定的。


你可能感兴趣的:(【SQL 编程你也行】SQL Server分页性能分析)