OutSystemsでアプリを開発していると、「大量データを効率よく扱う」ことが課題になります。特に一覧画面では、すべてのレコードを一度に読み込むのは非効率。そこで登場するのが ページング処理 です。
従来のやり方とその問題点
一般的には次のように2つのクエリを用意します。
- ページングされたデータを取得するクエリ
- 全件数を取得するクエリ
しかし、この方法には弱点があります。
- データベースに余計な負荷がかかる
- クエリが二重管理となり、修正時に手間が増える
1クエリで完結させる新しいアプローチ
そこで活用したいのが COUNT(*) OVER() です。これを使えば、1つのクエリで「データ」と「全件数」を同時に取得できます。
SELECT *, COUNT(*) OVER() AS FullCount
FROM Entity
WHERE …
ORDER BY …
OFFSET @StartIndex ROWS
FETCH NEXT @MaxRecords ROWS ONLY
この構文を使うことで、結果セットに全件数を含めることができます。つまり、1つのクエリで「データ」と「件数」を同時に取得できるため、レスポンス時間を半分に短縮でき、保守性も向上します。


