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