Web ページで使用する SQL クエリの結果をページ分割しようとしています。言語とデータベース バックエンドは PHP と SQLite です。
私が使用しているコードは次のように機能します(ページ番号は0から始まります)
http://example.com/table?page=0
page = request(page)
per = 10 // results per page
offset = page * per
// take one extra record so we know if a next link is needed
resultset = query(select columns from table where conditions limit offset, per + 1)
if(page > 0) show a previous link
if(count(resultset) > per) show a next link
unset(resultset[per])
display results
これよりもページネーションを行う効率的な方法はありますか?
現在の方法で見られる問題の 1 つは、表示を開始する前に、10 個すべて (または多数) の結果をメモリに格納する必要があることです。これを行うのは、PDO が行数が使用可能になることを保証しないためです。
COUNT(*)
クエリを発行して存在する行数を確認し、結果をブラウザにストリーミングする方が効率的ですか?
これは、「テーブルのサイズと、count(*)
クエリがデータベース バックエンドで完全なテーブル スキャンを必要とするかどうかによって異なります」、「自分でプロファイリングを行う」ような質問の 1 つですか?