ホームページ  >  記事  >  データベース  >  mysqlのファイルソートとは何ですか

mysqlのファイルソートとは何ですか

青灯夜游
青灯夜游オリジナル
2022-11-11 17:21:102502ブラウズ

mysql では、filesort はファイルのソートを指し、対応するソート アルゴリズムを通じてメモリ内で取得したデータをソートします。ファイルソートには 2 つのタイプがあります: 1. 双方向ソート。最初に対応するソート フィールドと、対応する条件に従って行データを直接見つけることができる行ポインタ情報を取り出し、次にソート バッファ内でソートします。2 . 単方向ソート (1 回限りのソート) 条件を満たす行のフィールドをすべて取り出し、ソート バッファーでソートします。

mysqlのファイルソートとは何ですか

このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。

MySQL の ORDER BY には 2 つのソート実装方法があります:

1. 順序付きインデックスを使用して順序付きデータを取得します
2. ファイルソート (filesort)

Explain でクエリを分析する場合、順序付けされたインデックスを使用して順序付けされたデータを取得し、インデックスを使用して表示し、ファイルソートを使用して表示しますso rt。

ORDER BY のすべての列を同じインデックスに含める必要があり、インデックスの順序が order by 句の順序および並べ替え方向とまったく同じである場合のみすべての列 (昇順または降順) が同じです (ASC モードと DESC モードを混合して使用する場合、インデックスは使用されません)

where ステートメントと order by ステートメントの組み合わせ左端のプレフィックスを満たします

その他の場合は、次のようにファイルの並べ替えを使用します:

1) where ステートメントと order by ステートメント、異なるインデックスを使用

2) チェックされる行が多すぎるため、カバーインデックスが使用されていません

3) ORDER BY では、列は同じインデックスに含まれません。つまり、異なるインデックスが使用されます。

‑ ‑4) ASC と DESC の両方がインデックス列に使用されます

‑ ‑ 5) where ステートメントまたは ORDER BY ステートメントのインデックス列で、関数式を含む式が使用されています。

6) 次の組み合わせwhere ステートメントと ORDER BY ステートメントは左端のプレフィックスを満たしますが、where ステートメントで検索されるのは範囲です。

filesort

このファイルソートはディスクファイルを並べ替えることを意味するものではなく、並べ替え操作が実行されたことを示すだけです。つまり、MySQL Query Optimizer によって与えられる実行計画 (EXPLAIN コマンドを通じて表示される) は、ファイル ソート (filesort) と呼ばれます。

ファイル ソートは、メモリ内で取得したデータを、対応するソート アルゴリズムを通じてソートすることです。MySQL には次の必要があります。メモリ内のデータを並べ替えるために使用されます。使用されるメモリ領域は、sort_buffer_size システム変数によって設定された並べ替え領域です。このソート領域は各スレッドに排他的であるため、MySQL には同時に複数のソート バッファ メモリ領域が存在する可能性があります。

ファイルソートには 2 つのタイプがあります。

  • 双方向ソート : まず、対応する条件に従って、対応するソートフィールドを取り出し、行データを直接見つけることができ、行ポインタ情報がソート バッファ内でソートされます。ソート後、ロウポインタに従ってクエリフィールドを取り出し、ディスクIOを2回実行します。

  • 一方向ソート: 条件行を満たすすべてのフィールドが一度に取得され、ソート バッファーでソートされます。ディスクIOを1回実行します。

MySQL は主に、設定したシステム パラメータ max_length_for_sort_data のサイズと、Query ステートメントによって取得されたフィールド タイプ サイズの合計を比較することによって、どのソート アルゴリズムを使用する必要があるかを決定します。 max_length_for_sort_data の方が大きい場合は、2 番目の最適化されたアルゴリズムが使用され、それ以外の場合は、1 番目のアルゴリズムが使用されます。したがって、ORDER BY 操作の効率をできるだけ高くしたい場合は、max_length_for_sort_data パラメーターの設定に注意する必要があります。同僚のデータベースでは、かつて大量のソート待機が発生し、その結果、システム負荷が高く、応答時間が長くなっていました。最終的に、MySQL が従来の最初のソート アルゴリズムを使用していることが判明しました。max_length_for_sort_data を増加させた後、パラメータ値を変更すると、システム負荷はすぐに低下しました。とても安心しましたし、対応も早くなりました。

order by 句が結合の最初のテーブルのみを参照する場合、MySQL は最初に最初のテーブルをソートしてから結合します。それ以外の場合、MySQL は最初に結果を一時テーブル (Temporary Table) に保存し、次に一時テーブル内のデータをソートします。このとき、Expain の Extra には「Usingtemporary using Filesort」と表示されます。 .

【関連する推奨事項: mysql ビデオ チュートリアル ]

以上がmysqlのファイルソートとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。