HashGroupBy では、グループごとに 1 つのローで構成されるイン・メモリ・ハッシュ・テーブルが構築されます。入力ローが読み込まれると、ワーク・テーブル内で関連グループが検索されます。集合関数が更新され、グループ・ローがワーク・テーブルに再び書き込まれます。グループ・レコードが見つからなければ、新しいグループ・レコードが初期化され、ワーク・テーブルに挿入されます。
HashGroupBy は、結果のローをすべて計算してから最初のローを返します。また、完全な sensitive または values sensitive カーソルを満たすために使用できます。ハッシュ GROUP BY の結果が完全に実体化されてから、クエリがローを返されなければなりません。このため、オプティマイザは必要に応じてワーク・テーブルを実行プランに追加します。
HashGroupBy は並列実行できます。
グループがメモリに収まる場合は、入力のサイズに関係なく HashGroupBy が適切に機能します。ハッシュ・テーブルがメモリに収まらない場合は、入力はメモリに収まるようになるまで小さなワーク・テーブルに再帰的に分割されます。オプティマイザはクエリの実行中にメモリ不足を検出すると、HashGroupBy を使用したアクセス・プランの生成を避けます。分割用のメモリが足りないと、オプティマイザは HashGroupBy からの中間結果を廃棄し、代わりに内部メモリ不足時方式を使用します。
HashGroupBy 演算子で使用できるメモリ容量は、サーバのマルチプログラミング・レベルとアクティブな接続の数によって異なります。SQL Anywhere でのスレッドとデータベース・サーバのマルチプログラミング・レベルの設定を参照してください。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |