もう少し説明すると、クリックするとその地域に関する詳細情報を取得するためにクエリが実行される地域の画像マップがある場合。
私のクライアントは、その地域の画像マップにカーソルを合わせたときに、おおよその数の検索結果を表示するように求めています。
私の問題は、どのようにキャッシュするのですか? または、サーバーのメモリ リソースを大幅に使い果たすことなく、その数値を取得できますか?
ところで、それが必要な情報であれば、phpとmysqlを使用しています。
4 に答える
クエリを定期的に実行し、結果を (別のテーブルなどに) 保存することができます。
結果は完全に最新のものではありませんが、適切な概算値であり、サーバーの負荷が軽減されます。
MySQL は、クエリを実際に実行しなくても、クエリによって返されるおおよその行数を提供できます。これが EXPLAIN 構文の目的です。
「SELECT」の前に「EXPLAIN」を使用してクエリを実行し、行列のすべての結果を乗算します。
精度は大きく変動します。一部のタイプのクエリでは機能する場合がありますが、他のタイプでは役に立たない場合があります。MySQL のオプティマイザが保持するデータに関する統計を利用します。
注: テーブルに対して ANALYZE TABLE を定期的に (つまり、月に 1 回) 使用すると、これらの見積もりの精度が向上する場合があります。
地域の ID を使用して別のテーブルを作成し、すべての地域を遅い時間 (たとえば夜) に実行して、この余分なテーブルにデータを入力するスクリプトを作成できます。
次に、ホバーすると、この新しいテーブルから ID が取得されますが、その ID は最大で 1 日古いものです。
それに関する問題は、遅い時間がないこと、または夜間に実行されるランスルーに時間がかかり、プロセスが非常に重いことです。
コメントを編集します。
可能であれば大きな地域または国を取り上げ、選択した SQL ブラウザー内でその地域のクエリを実行し、かかる時間を調べます。
それが多すぎる場合は、特定の国が特定の時間に実行され、小さな国が一緒に実行され、大きな国が特定の期間だけ実行されるように分散することができます。
ロールエバー イベントが発生したときにこの情報を取得するためにデータベースにまったくアクセスしたくないという懸念はありますか?それとも、クエリが遅すぎると考えているため、データベースからの情報はより高速に取得したいという懸念がありますか? ?
遅いクエリがある場合は、それを調整するか、既に提供されている他の提案のいくつかを使用できます。
または、データベースのヒットを完全に回避するために、このマップには限られた数の地域があるようで、すべての地域に対して定期的にクエリを実行し、その数をメモリに保持できます。