1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ROW_NUMBER vs OFFSET/FETCH - Pagination in SQL Server

Last updated at Posted at 2016-10-07

目的:

SQLのPagingは後ろのページになるに連れて遅くなると聞いたので、どれだけ遅くなるのか試してみた。
参考サイトによると、SQL Server 2012ではROW_NUMBERの代わりにOFFSETが推奨されていたので、その点も含めて。

※実際に試してみたのは SQL Database (V12)。
参考:http://social.technet.microsoft.com/wiki/contents/articles/23811.paging-a-query-with-sql-server.aspx

データ量 :約250万件
取得データ:25万ページ目、10件/ページ

ROW_NUMBERの場合:

rownumber.jpg

Wait time on server replies (avg):617.0000 ms

OFFSETの場合:

offset.jpg

Wait time on server replies (avg):1410.6670 ms

結果:

後半のページだと、OFFSETの方が2倍近く遅かった。

考察:

後半のページにも結構需要があって、厳しい性能が求められる場合はROW_NUMBERの方が良さそう。
ただSQLがシンプルになるし、やっぱりできればOFFSETを使いたい。

参考サイトでは、OFFSETの方がサーバーから受信するデータ量が減らせると有るけど、
それはその行が全体の何行目かという情報だと思うので、
不要ならSELECTしなければいいだけ。
むしろ必要な場合、OFFSETだと別途計算する必要がある。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?