目的:
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の場合:
Wait time on server replies (avg):617.0000 ms
OFFSETの場合:
Wait time on server replies (avg):1410.6670 ms
結果:
後半のページだと、OFFSETの方が2倍近く遅かった。
考察:
後半のページにも結構需要があって、厳しい性能が求められる場合はROW_NUMBERの方が良さそう。
ただSQLがシンプルになるし、やっぱりできればOFFSETを使いたい。
参考サイトでは、OFFSETの方がサーバーから受信するデータ量が減らせると有るけど、
それはその行が全体の何行目かという情報だと思うので、
不要ならSELECTしなければいいだけ。
むしろ必要な場合、OFFSETだと別途計算する必要がある。