ユーザーがMySQLデータを検索してページネーションできるようにする分散PHP5アプリケーションがあります。場合によっては、クエリに数十万のレコードが含まれる場合があり、これらは常にタイムスタンプでソートされるため、レコードの量と順序がそのままパフォーマンスに影響します。
ページネーションをより効率的にする必要があります。ずっと前に私SQL_CALC_FOUND_ROWS
は a を支持して捨てましたCOUNT(*)
が、これはクエリがまだ 2 回実行されることを意味します。1 回は制限あり、もう 1 回は制限なしです。
2 つのクエリを組み合わせて、LIMIT
節を使用する代わりに PHP を使用して結果セットのページ付けを行うことができます。更新: 私が作業しようとしている大規模なデータセットは、php に設定されたメモリ制限を超えるため、これは不可能です。これは配布されているため、すべての人に設定を変更してもらうことはできません。
ただし、結果をキャッシュして、そのようにページ分割したいのですが、MySQL に再度クエリを実行するよりもはるかに高速です。これは分散アプリケーションであるため、Memcached などの通常使用するキャッシュ システムはありません。セッション ストレージが小さすぎる可能性があります。
代替手段はありますか?結果をページ分割するより良い方法、または結果をキャッシュして PHP にページ分割させる安全な方法はありますか?