ホームページ > データベース > mysql チュートリアル > ウィンドウ化された集計関数を使用すると、特に共通の部分式スプールで論理読み取りが非常に高くなるのはなぜですか?

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

Linda Hamilton
リリース: 2024-12-26 18:47:15
オリジナル
905 人が閲覧しました

Why are logical reads so high when using windowed aggregate functions, especially with common subexpression spools?

ウィンドウ化された集合関数の論理読み取りが非常に多いのはなぜですか?

ウィンドウ化された集合関数では、共通の実行プランで論理読み取りが高くなる可能性があります。部分式スプール、特に大きなテーブルの場合。この記事の目的は、この観察の背後にある理由を説明し、ワークテーブルの論理読み取り数を理解するための洞察を提供することです。

説明

ワークテーブルの論理読み取り数は、従来のものと比較して異なる方法でカウントされます。スプールテーブル。ワークテーブルでは、読み取られた各行は 1 つの「論理読み取り」に変換されます。これは、「実際の」スプール テーブルのハッシュされたページのレポートとは異なります。

この方法で読み取りをカウントする根拠は、分析により意味のある情報が提供されることです。ワークテーブルのハッシュされたページを追跡することは、これらの構造の内部的な性質によりあまり役に立ちません。スプールされた行のレポートには、tempdb リソースの実際の使用率がより適切に反映されます。

式の導出

ワークテーブルの論理読み取りを予測するために導出される式は次のとおりです。

Worktable logical reads = 1 + (NumberOfRows * 2) + (NumberOfGroups * 4)
ログイン後にコピー

この式は次のことを説明します。以下:

  • 1: ワークテーブルへのデータの初期ロードを表します。
  • NumberOfRows * 2: 2 つのセカンダリ スプール (行を返すコストを削減するために作成されました) は完全に読み込まれます
  • NumberOfGroups * 4: プライマリ スプールは、以下で説明するように行を出力し、その結果、個別のグループ値の数 (プラス 1) が得られます。

一次スプール列排出

一次行を蓄積し、集計計算を実行するタスクを負ったスプールは、次のように動作します:

  • 入力から各行を読み取り、ワークテーブルに書き込みます。
  • 新しいグループが見つかったとき、ネストされたループ演算子に行を出力し、新しいグループ パーティションの開始を示します。
  • 各グループの平均が計算されます。ワークテーブル内の行を使用します。
  • 平均はワークテーブル内の行と結合されます。
  • 次のグループに備えてワークテーブルは切り捨てられます。
  • 最後のグループを処理するには

追加考慮事項

テスト スクリプトでは、同じプロセスを複製すると論理読み取りが少なくなることがわかりました (11)。この不一致は、異なる環境でクエリ プロセッサが採用するアルゴリズムの最適化に起因すると考えられます。この式は、ネストされたループまたはハッシュ結合が使用される一般的なケースでも引き続き有効です。

結論

ワークテーブル内の論理読み取りのカウントの違いを理解することは、ウィンドウ化された集計関数を含む実行計画を正確に解釈するために不可欠です。提供されている式は、ワークテーブルの論理読み取りを見積もる便利な方法を提供し、パフォーマンス分析と最適化の取り組みに役立ちます。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート