Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL の使用法 » クエリ処理 » クエリの最適化と実行 » クエリ実行アルゴリズム » アルゴリズムの種類 » グループ化アルゴリズム

 

HashGroupBy アルゴリズム (GrByH)

HashGroupBy では、グループごとに 1 つのローで構成されるイン・メモリ・ハッシュ・テーブルが構築されます。入力ローが読み込まれると、ワーク・テーブル内で関連グループが検索されます。集合関数が更新され、グループ・ローがワーク・テーブルに再び書き込まれます。グループ・レコードが見つからなければ、新しいグループ・レコードが初期化され、ワーク・テーブルに挿入されます。

HashGroupBy は、結果のローをすべて計算してから最初のローを返します。また、完全な sensitive または values sensitive カーソルを満たすために使用できます。ハッシュ GROUP BY の結果が完全に実体化されてから、クエリがローを返されなければなりません。このため、オプティマイザは必要に応じてワーク・テーブルを実行プランに追加します。

HashGroupBy は並列実行できます。

グループがメモリに収まる場合は、入力のサイズに関係なく HashGroupBy が適切に機能します。ハッシュ・テーブルがメモリに収まらない場合は、入力はメモリに収まるようになるまで小さなワーク・テーブルに再帰的に分割されます。オプティマイザはクエリの実行中にメモリ不足を検出すると、HashGroupBy を使用したアクセス・プランの生成を避けます。分割用のメモリが足りないと、オプティマイザは HashGroupBy からの中間結果を廃棄し、代わりに内部メモリ不足時方式を使用します。

HashGroupBy 演算子で使用できるメモリ容量は、サーバのマルチプログラミング・レベルとアクティブな接続の数によって異なります。SQL Anywhere でのスレッドデータベース・サーバのマルチプログラミング・レベルの設定を参照してください。