クエリからおおよその検索結果の数を取得する最良の方法は何ですか?

StackOverflow https://stackoverflow.com/questions/600972

質問

もう少し説明すると、ある領域のイメージ マップがある場合、クリックされると、その領域に関する詳細情報を取得するためにクエリが実行されます。

私のクライアントは、その地域のイメージ マップ上にマウスを移動しているときに、おおよその数の検索結果を表示することを求めています。

私の問題は、どうやってキャッシュするかということです。それとも、サーバーのメモリ リソースを大幅に使い果たさずにその数値を取得できますか?

ところで、それが必要な情報であれば、私はphpとmysqlを使用しています。

役に立ちましたか?

解決

定期的にクエリを実行し、結果を保存することができます(たとえば、別のテーブルに)。

結果は完全に最新のものではありませんが、適切な近似値であり、サーバーの負荷を軽減します。

他のヒント

MySQL では、実際にクエリを実行しなくても、クエリによって返されるおおよその行数を知ることができます。これが EXPLAIN 構文の目的です。

「SELECT」の前に「EXPLAIN」を指定してクエリを実行し、行列内のすべての結果を乗算します。

精度は非常にばらつきがあります。一部の種類のクエリでは機能する場合がありますが、他の種類のクエリでは役に立たない場合があります。MySQL のオプティマイザーが保持するデータに関する統計を利用します。

注記:テーブルに対して ANALYZE TABLE を定期的に (つまり、月に 1 回) 使用すると、これらの推定の精度が向上する可能性があります。

地域のIDを使用して別のテーブルを作成してから、遅い時間(たとえば夜)にすべての地域で実行し、この追加のテーブルにデータを入力するスクリプトを作成できます。

ホバーすると、この新しいテーブルからIDを取得します。最大で1日前です。

それに関する問題は、遅い時間がないこと、または夜間に行われるランスルーに時間がかかり、プロセスが非常に重いことです。

コメントを編集します。

可能な場合は大きな地域または国を取得し、選択したSQLブラウザ内でその地域のクエリを実行し、所要時間を確認します。

特定の国が特定の時間に実行されるように配布することができれば、小国は一緒に、大国はある期間だけで配布できます。

ロールエバーイベントが発生したときにこの情報をデータベースにまったくアクセスしたくない、またはクエリが遅すぎてデータベースの情報が必要だと思われるのではないかと心配です、しかし高速ですか?

遅いクエリがある場合は、それを調整するか、既に提供されている他の提案のいくつかを使用できます。

別の方法として、データベースヒットを完全に回避するために、このマップ上に有限数の領域があるように思われます。すべての領域に対して定期的にクエリを実行し、メモリ内に数値を保持できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top