SQL初心者はこちら。
実行に約10秒かかるクエリがあるため、アプリケーションの速度が低下します。
MySQLまたはより一般的にはSQLで、サーバーが定期的に(1〜5分ごとに)クエリを実行してどこかに保存し、この「キャッシュ」テーブルにクエリを実行して簡単にアクセスできるようにすることは可能でしょうか。
よろしくお願いします!
SQL初心者はこちら。
実行に約10秒かかるクエリがあるため、アプリケーションの速度が低下します。
MySQLまたはより一般的にはSQLで、サーバーが定期的に(1〜5分ごとに)クエリを実行してどこかに保存し、この「キャッシュ」テーブルにクエリを実行して簡単にアクセスできるようにすることは可能でしょうか。
よろしくお願いします!
ほとんどの場合、クエリの内容によっては、テーブルに欠落しているインデックスを作成することでクエリを高速化できます。EXPLAIN EXTENDEDをクエリの前に配置して、使用しているインデックスを確認し、インデックスを作成する必要がある列を特定してください。インデックスを作成する必要がある列は、whereステートメントの列と、結合で使用されるフィールドです。クエリとテーブルスキーマを提供すると、いくつかのインデックスの推奨に役立つ場合があります。
一時テーブルを埋めるために5分ごとにプロセスを実行する方法はおそらくかなりありますが(cronジョブ、スケジュールされたタスク、アプリからスレッドを実行する)、次のような抜本的な対策を講じる前に、インデックス作成オプションを使い果たした方がよいでしょう。このように、より多くのリソースを使用する可能性があります。また、必ずしもアプリケーションのパフォーマンスが向上するとは限りません。
アプリケーションには、ウェイクアップ、クエリの実行、結果の一時テーブルへの保存を行うスレッドが含まれている可能性があり、アプリケーションの残りの部分は一時テーブルのみを使用します。
MySQLにはそのようなスケジューリングの規定はありません。
ただし、いつでもスケジュールされたジョブを実行して(at
Windowsでは/ scheduler、cron、またはUnixで使用するスケジューリングシステムを介して)、このような「結果を実行してステージングテーブルに挿入する」クエリ/手順を実行できます。
直接の質問とは別に、クエリの最適化も検討してください-まだ行っていない場合は、テーブルのインデックス作成や再アーキテクチャの賢明な適用によってスピードアップする可能性があります(ただし、一部のクエリは次のように最適化されていることを完全に認めます彼らができる限り最高)
別の解決策はストリーミング/チャンキングです-アプリにオンデマンド/必要に応じて「次のN行」を取得させます。
また、クエリ結果をDBではなくアプリ自体にキャッシュすることを検討してください。そうすれば、キャッシュはDBアクセスを必要とせず、さらに高速になります。
確かに、このソリューションはおそらく今のところあなたの範囲を超えています。ORMフレームワークを使用して、キャッシュを実行できます。基本的にあなたが求めているのは、結果のキャッシュソリューションです。キャッシングソリューションは、使用しているベンダーと言語によって異なります。