効率のいい件数取得方法 (その2)

2016/06/25

効率のいい件数取得方法ではCOUNT(1) OVER()を利用して総件数を求めたが、総件数を表示するのでなく、ページング可能な最大件数を表示すればいいという要件の場合、もっと効率のいいSQLが書ける。
例えば、ある条件に合致するデータが50000件あり、ユーザが検索できるのはそのうち10000件であるとする。一画面に表示するのは100件で、LIMITとOFFSETを使ってページングを行う。

WHERE句での検査が最大10000件までで止まってくれる。

WITH句のSQLでは取得件数に影響を及ぼさない結合等は行わず、最後のSQLで必要な結合を行う必要がある。
最後のSQLは100件に絞っているため、マスタ等を結合するとき、10000件分結合するのではなく100件分だけ結合すれば良くなる。

また、最後のCOUNT(1) OVER()は(SELECT COUNT(1) FROM core) としても良い。特にプログラム側から複雑なSQLを組み立てるとき、条件によって、複数できたWITH句のうち、どの件数を取得するか動的に選べるようにする時には役に立つ。

-SQL
-