SQL Anywhere のクエリ・オプティマイザは、SQL の集合差演算子 EXCEPT のソートベースの変形 MergeExcept (EM) とハッシュベースの変形 HashExcept (EH) の 2 つの物理的な実装から選択します。
MergeExcept では、MergeJoin を使用して、ソートされた順序でローの一致を分析して、2 つの入力の集合差が計算されます。多くの場合、2 つの入力の明示的なソートが必要です。同様に、HashExcept では、HashAntisemijoin を使用して 2 つの入力の集合差が計算され、ハッシュ左外部ジョインを使用して 2 つの入力の差が計算されます (EXCEPT ALL)。
メモリ不足が検出されると、HashExcept は動的にネスト・ループ方式に切り替わる場合があります。この場合は、パフォーマンス・カウンタの値が増分されます。このモニタ値を読むには、QueryLowMemoryStrategy データベースまたは接続プロパティ、グラフィカルなプランの QueryLowMemoryStrategy 統計情報 (統計情報付きで実行した場合)、または Windows パフォーマンス・モニタの [クエリ:メモリ不足時方式] カウンタを使用します。
HashExcept はメモリ不足状態の Windows Mobile では無効になります。
EXCEPT の場合、MergeExcept と HashExcept は、結果に重複が含まれないように、DISTINCT アルゴリズムの 1 つと組み合わせられます。EXCEPT ALL の場合、HashExceptAll と MergeExceptAll は、結果内の重複するローの正しい数を計算する RowReplicate と組み合わせられます。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |