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 の使用法 » クエリ処理 » クエリの最適化と実行 » クエリ実行アルゴリズム » アルゴリズムの種類 » 重複排除アルゴリズム

 

HashDistinct アルゴリズム (DistH)

HashDistinct は 1 つの入力を受け取り、すべての排他ローを返します。HashDistinct は、これを入力を読み込んだ時に行い、イン・メモリ・ハッシュ・テーブルを構築します。入力のローは、ハッシュ・テーブル内で見つかると無視されます。それ以外の場合は、ワーク・テーブルに書き込まれます。入力全体がイン・メモリ・ハッシュ・テーブルに収まらない場合は、小さなワーク・テーブルに分割され、再帰的に処理されます。

また、HashDistinct には次のような特性があります。

  • DISTINCT ローがメモリ内テーブルに収まる場合は、入力の合計ロー数に関係なく適切に機能する。

  • ワーク・テーブルを使用するので、insensitive セマンティックまたは value sensitive セマンティックを提供できる。

  • 前に返されなかったローを見つけるとそのローを返す。ただし、ハッシュ DISTINCT の結果が完全に実体化されてから、クエリがローを返さなければなりません。このため、オプティマイザは必要に応じてワーク・テーブルを実行プランに追加します。

  • 入力のローをロックする。

オプティマイザはクエリの実行中にメモリ不足を検出すると、ハッシュ DISTINCT アルゴリズムを使用したアクセス・プランの生成を避けます。利用可能なキャッシュ・メモリがほとんどない環境で HashDistinct を実行した場合、HashDistinct は完了できません。この場合、HashDistinct では中間結果が廃棄され、代わりに内部メモリ不足時方式が使用されます。

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