負荷を抑えたページング処理

  1. 1億件のレコード
  2. 1ページに100件表示
  3. 未表示のレコードが存在する場合、現在のページに次へリンクを表示

…例えば、上記のような条件でページング処理を実装したい場合。
全件取得のクエリを投げたりすると負荷の掛かり方が半端じゃないので、それはNG。

  • 1ページの表示上限数より1レコード余分に取得する(上の例だと101件取得)
    • もし、101件取れたら「未表示のレコードが存在する」ということになる
    • もし、100件以下だったら、もう表示させるレコードは無い

// 1ページの表示上限件数
$perPage = 100;
// 表示上限件数より1レコード余分に取得する
$chunoHistory = ChunoPeer::getChunoList($userId, $perPage+1);
if (count($chunoHistory) > $perPage ) {
  $this->isLinkNext = true;
  // 余分に取得していたレコードを取り除く
  array_pop($chunoHistory );
} else {
  $this->isLinkNext = false;
}