1

ユーザーがフィルターを定義し、フィルター条件に一致する学生の投稿を表示できる大学向けのアプリケーションを開発しています。

最初に、MYSQL はクエリを実行してuser_id、フィルター パラメーター (学年、専攻など) に一致するすべての学生を検索します。次に、この結果を使用して、user_idJOIN を介してそれらにリンクされた対応する投稿/イベントを照会して検索します。

質問:

同じuser_idが個別の JOIN クエリ (イベント、投稿など) で数回使用されるため、データを使用する後続の JOIN クエリを高速化するために、結果を内部的に mysql に保存できるかどうか疑問に思っていました。

却下された解決策:

  1. MySQL クエリ キャッシュを使用する - クエリは毎回同じではないため、適用されません。最初の結合シーケンスは同じですが、その後、異なる結合パラメータが各クエリに適用されます。
  2. データを API (php) にプルし、 long を使用してクエリを送信しますwhere user_id = IN(#, #, #...)。MYSQL に送り返すユーザー ID が 10,000 ある場合があります。クエリが非常に大きくなり、JOIN の節約が相殺されます。
4

2 に答える 2

1

存在しないパフォーマンスの問題を解決しないでください。つまり、最初にさまざまなクエリを試してください。それらがアプリケーションのパフォーマンス基準を満たしている場合は、続行して他のことを行います。ユーザーは、内部ループからマイクロ秒を絞り出すよりも、より多くの機能と安定性に関心があります。

とはいえ、通常のプロセスは一時的なテーブルです。ただし、結合に適切なインデックスが付けられ、結果セットが小さい場合(つまり、全表スキャンを実行していない場合)、パフォーマンスの向上はごくわずかである可能性があります。

于 2012-12-26T18:18:25.343 に答える
0

create or replace view database.foo_query_view as select id from students where [match-criteria]. ビューは読み取り専用であることに注意してください。ただし、選択のみを行いたいと思われる場合は、問題ありません。

于 2012-12-26T18:35:25.717 に答える