0

私はこのユースケースを持っています:同じテーブルに対して同じ「ロジック」クエリを一定回数、複数回実行する必要があります(同じセマンティックで、「WHERE」ステートメントが比較される値のみが異なります)。

クエリ レイアウト:

SELECT [(SUM(col_name),col_name,...)]
FROM table_name
WHERE expr AND expr...

このタスクのパフォーマンスを向上させるふりをします。

この問題についてここで見つけた記事を読んだり、追加の調査を行ったりすると、次の関連する事実を指摘できます。

  • 内部一時テーブルは使用されません (クエリで EXPLAIN を使用)
  • クエリ キャッシュは使用されません (同一のクエリではありません)。

問題のテーブルをミラーリングするメモリ (RAM、ENGINE=MEMORY) 内に一時テーブルを作成し、このメモリ内テーブルに対してすべてのクエリを実行すると、パフォーマンスを向上させることはできますか?:

CREATE TABLE tmp_table_name ENGINE=MEMORY SELECT * FROM table_name;

tmp_table_name に対してクエリを実行します

DROP TABLE tmp_table_name;

MySQL ドキュメントを参照してください: MEMORY (HEAP) ストレージ エンジン

ありがとう。

4

1 に答える 1

0

MEMORY はパフォーマンスを向上させますか? ほとんどの場合、いいえ。

いいえ、MEMORY を使用できない場合は MEMORY を使用できません -制限を参照してください

いいえ、テーブルの作成に時間がかかりすぎると、MEMORY は遅くなります。

いいえ、コピーは最新のものではないためです。(OK、多分それは問題ではありません。)

いいえ、他のキャッシュから盗み、他のクエリを遅くしているためです

いいえ -- お使いのバージョンで VARCHAR が CHAR に変わる場合、MEMORY テーブルが非 MEMORY テーブルよりもはるかに大きくなり、他の問題が発生する可能性があります。

たぶん -- とにかくすべてが RAM にキャッシュされている場合、MEMORY はほぼ同じ速度で実行されます。

あなたの特定の例は、おそらくスピードアップすることができます

  • 適切な「複合」インデックスを使用します。(あなたのSELECTの詳細を見せてください)
  • サマリー テーブルの作成と維持 -- これが「データ ウェアハウス」アプリケーションの場合。(もう一度、詳細を見てみましょう。)
于 2015-04-18T07:59:56.797 に答える