私はMySQLデータベースと約128,000行のテーブルを持っています(私が理解していることからするとかなり小さいです)。また、ページングを実行するように設定されたアプリケーションが接続されています。私のSQLクエリは次のようになります。
SELECT * FROM Documents WHERE PortfolioId = ? LIMIT ?,?
SELECT * FROM Documents WHERE PortfolioId = ? ORDER BY Date DESC LIMIT ?,?
私の問題は2つあります。まず、使用するクエリに関係なく、最初の「LIMIT」の数値が大きいほど、クエリの戻りが遅くなり、最終的には許容できない遅延になります。たとえば、phpmyadminに移動して実行すると、次のようになります。
SELECT * FROM Documents WHERE PortfolioId = 1 LIMIT 0,20
クエリには.001秒かかります。ただし、これを実行すると、次のようになります。
SELECT * FROM Documents WHERE PortfolioId = 1 LIMIT 120000,20
クエリには14.8秒かかります。
私の2番目の問題は、日付で並べ替える2番目のクエリ(これもテーブルにインデックスが付けられています)によって、それぞれのクエリにはるかに長い時間がかかることです(最初の例では0.1秒、2番目の例では 2分23秒) )。
これらのクエリを実行してはるかに高速にするためのより良い方法はありますか?私の理解では、開発者は数百万行のテーブルにページングを実装することがよくありますが、このようにすると、後のページが読み込まれるまでに非常に長い時間がかかります。