ページングするためだけにSELECT COUNT(*)しない

件数の多い一覧にはページングが必要になるのだけど、ずっと前からこのページングのリンク(前へ | 次へ、とか)を表示するためだけに、レコードの総件数をカウントするのが無駄だなぁと思っていた。一般的なRDBを使っている場合には、一覧取得のSQLと同じWHERE句のCOUNT問い合わせを行わなければならず、コーディング上も面倒だし、DBに対するクエリが増えるのもいただけない。総件数を表示するのであれば仕方がないけれども、そうでない場合にはなんとかしたい。
いつも不満に思っていたおかげで、最近やっと「前へ | 次へ」のような単純なページングの場合にはCOUNT問い合わせをしなくてもよいことに気がついた。とても今更すぎるけれども。
例えば、20件ずつの一覧であればLIMITを21にして取得したレコードが21件あれば「次へ」を表示するだけでよかった。「前へ」はオフセットが0でなければ表示すればよいので、これからは1本のSQLでページングができそう。

コメントする

メールアドレスが公開されることはありません。