私はクライアント リクエストがある PHP でバックエンド コードを書いています。何千ものユーザーの中で優先度に基づいてユーザーのコレクションを表示する必要があります。
私の問題は次のとおりです。クエリが重すぎて多くの内部結合と比較が必要なため、コードが非常に遅くなり、応答に多くの時間がかかります。
要求と応答時間に影響を与えることなく、すべてのユーザーを蓄積し、すべてのクエリと計算を実行できる方法を提案できますか?
私はクライアント リクエストがある PHP でバックエンド コードを書いています。何千ものユーザーの中で優先度に基づいてユーザーのコレクションを表示する必要があります。
私の問題は次のとおりです。クエリが重すぎて多くの内部結合と比較が必要なため、コードが非常に遅くなり、応答に多くの時間がかかります。
要求と応答時間に影響を与えることなく、すべてのユーザーを蓄積し、すべてのクエリと計算を実行できる方法を提案できますか?
多くのクエリを実行すると、JOINS
パフォーマンスCONDITIONS
に影響しますが、データベースの設計が適切である限り、最小限に抑えられます(データベースの正規化)。コードのパフォーマンスに主に影響するのは、クエリで使用されるテーブルのサイズ(レコード数)ですが、クエリの最適化に役立つINDEXES
(インデックスの使用方法)やその他のツールもあります。
個人的には、カプセル化を適用するストアドプロシージャをクエリで使用することをお勧めします。そして、実装ごとに、を回避するのに役立ちますSQL Injection
。
Mysql ビューを使用して、複雑なクエリと長時間を回避します。
具体化されたビューと呼ばれる手法を試すことができます。つまり、集計を含むいくつかのテーブルに対して事前計算を行い、集計を使用してオンライン クエリを高速化します。一方、計算の基にしているデータが頻繁に変更される場合、この手法はあまり役に立ちません。
この件に関する詳細については、こちらをご覧ください: http://www.fromdual.com/mysql-materialized-views