1

mysql2 つのテーブルを結合し、いくつかの where 句と order by を持つクエリの最適化に取り組んでいます。

クエリの評価中に一時テーブルが作成されることに気付きました (説明を使用)。(結合キューの最初のテーブルではないテーブルのフィールドでグループ化しているため)

この一時テーブルがディスクに書き込まれているかどうかを知りたいのですが、説明の結果ではわかりません。

また、一時テーブルに何が入っているかを正確に把握できると便利です。where 句の制限には、インデックス付きの列に関するものとそうでないものがあるため、mysql が行を一時テーブルに最適に選択していない可能性があると思います。

具体的には、私のクエリは基本的に次の形式です。 select ... from a join b where ... インデックス付き列とインデックス付き列の両方で a と b の両方に制限があります。問題は、 a から選択された一時テーブルに入る行数が、私が思っているよりも多いことです。これを調べたい。

4

1 に答える 1

-2

すべてのデータベースはメモリ領域または作業領域を使用してクエリを実行し、クエリの作成方法に応じて、これらのメモリ領域の一時テーブルを使用します。複数のテーブルを結合すると、最終的な結果セットを構築するために複数のテーブルが使用される場合があります。これらの一時テーブルは通常、ユーザーがログオンしている限りメモリ内に存在します。

Explain は、SQL を解釈するときに最適化しようとしているプロセスを示しています。適切にインデックス付けされていない where 句がある場合、または結合で where 句を使用している場合は、最終的な結果セットを実行して構築するときに、過剰な量のデータをメモリに取り込む可能性があります。これは、DB レベルでのパフォーマンスの低下がどのように見えるかです。

最後の段落の疑似コードを読むと、索引付けが必要であり、Where 句を書き直して索引付けされたフィールドに結合する必要があると言えます。本当に意見が必要な場合は、SQL を投稿してください。

于 2013-04-10T04:32:19.447 に答える