ホームページ >データベース >mysql チュートリアル >共通の部分式スプールを使用したウィンドウ集計関数で、このような高い論理読み取りが発生するのはなぜですか?

共通の部分式スプールを使用したウィンドウ集計関数で、このような高い論理読み取りが発生するのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-29 21:52:10314ブラウズ

Why Do Windowed Aggregate Functions with Common Subexpression Spools Result in Such High Logical Reads?

共通の部分式スプールを使用したウィンドウ集計関数の論理読み取りが非常に高いのはなぜですか?

共通の部分式を使用した実行プランでは次のことがわかりました。スプールでは、大きなテーブルに対して報告された論理読み取りが予想より大幅に高くなります。調査の結果、真実であると思われる式が明らかになりました。 ワークテーブルの論理読み取り = 1 NumberOfRows 2 NumberOfGroups 4.

式を理解する

高度な論理読み取りは、ワークテーブルが読み取りを処理する独自の方法から発生します。このコンテキストにおける論理読み取りは、ハッシュされたページではなく、読み取られた行数を指します。これは、処理される行ごとに、ワークテーブルが 1 つの論理読み取りを登録することを意味します。

論理読み取りの内訳

  • 1: 初期値最初の行を処理するために読み取られます。
  • NumberOfRows * 2: セカンダリ スプールの 2 つのパス中に各行が 2 回読み取られます。
  • NumberOfGroups * 4: プライマリ スプールはグループごとに 4 つの行を出力します。1 つはグループの開始用、 1 つはグループを終了し、2 つは集合体を保持します

論理読み取りが少ないレプリケーション試行

ヒープ テーブルを使用してプロセスをレプリケートしようとすると、論理読み取りが 11 件しか表示されません。次の理由によります。

  • 行数が少ない: テスト テーブルにはより大きな #Orders テーブルと比較して 5 行。
  • ネストされたループなし: クエリはネストされたループの代わりに OUTER APPLY を使用するため、ダミー行が不要になります。

結論

公式ワークテーブルによって読み取られた行数を正確に反映しているため、これは当てはまります。論理読み取りの増加は、非効率ではなく、行ベースのカウント方法によるものです。元のクエリで使用されているネストされたループ プランでは、この数がさらに増加し​​ます。

以上が共通の部分式スプールを使用したウィンドウ集計関数で、このような高い論理読み取りが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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