フィルタでは、任意のタイプの述部、subselect を含む比較、EXISTS と NOT EXISTS の各サブクエリ (その他の形式の限定サブクエリ) などの探索条件が適用されます。探索条件は、文の WHERE 句と HAVING 句、JOIN の ON 条件の FROM 句にあります。
オプティマイザでは、探索条件内の一連の述部が任意に簡素化、変更されます。また、元の文で指定された順序とは別の順序で条件が適用されるアクセス・プランが作成される場合もあります。クエリ書き換え最適化では、プラン内で評価された一連の述部が変更される場合があります。
クエリ内に述部があっても、アクセス・プランに Filter がない場合も多くあります。たとえば、IndexScan などのさまざまなアルゴリズムでは、明示的な演算子がなくても、述部を適用できます。たとえば、BETWEEN 述部に 2 つのリテラル定数があり、述部で参照されているカラムにインデックスがあるとします。この場合、BETWEEN 述部は、インデックス・スキャンの下限と上限で適用でき、クエリのプランには Filter は含まれません。ジョイン条件である述部も、アクセス・プランでフィルタになりません。
PreFilter は、事前フィルタの述部で使用される式が、クエリで参照されているテーブルまたはビューに依存しないことを除き、Filter と同じです。簡単な例として、WHERE 1 = 2
句の探索条件は事前フィルタに評価できます。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |