-1

20 分以上の実行時間からレポートを取得しようとしていますが、5 つの結合と 3 つのサブクエリを使用してすべての結果を 1 つのデータ セットに返す mysql クエリのこのモンスターのボトルネックを追跡しました。これまでの私の大きなボトルネックは次のようです: 支払いテーブルの在庫テーブルに参加すると、stock.id は payment.stock_id と一致し、payment.type はこのタイプで、payment.status はこのステータスです。私はゆっくりとこれをさまざまなクエリに分割し、Java にどのレコードを保持して破棄するかを決定させていますが、mysql でいくつかの結果セットを取得する効率的な方法があるかどうか疑問に思っています。おそらく、メモリに格納されたテーブルとしてクエリを実行しますそれらに対して?結果セットの一部は非常に大きく、最悪の場合でも数十万エントリになります。

前もって感謝します

4

1 に答える 1

0

これを時間間隔で実行できるようにマテリアライズドビューを作成する選択肢がいくつかありますが、基本的にはデータの有効性に遅延効果があります。しかし、確かに速いです。

2 つ目は、結合する列にインデックスを付けることです。

通常、副選択は JOIN よりもコストがかかるため、代わりに副選択を結合にマージしてみてください。

これらの質問を扱った、読む価値のある SQL 最適化の本がたくさんあります。ただし、DB、スキーマ、またはインデックス、および結合と副選択がどのようになっているのかを知らなくても。暗闇の中でボールをキャッチするようなものです。

于 2012-04-04T17:40:37.840 に答える