AND 操作のスコアリング
AND 操作をデータ ソースに委任する際の規則に従い、データ ソースが AND 操作をサポートしない場合は、1 つの操作のみを委任できます。Spectrum Spatial は、どの操作を委任するかを決めるため、WHERE 句のすべての操作を評価し、スコアの高低でランク付けします。最もスコアの高い操作がデータ ソースに委任されます。Spectrum Spatial は、残りの操作をクライアント側で処理します。
以下に、委任の優先順位を示します。
操作 | 例 |
---|---|
Distance | MI_Distance() < 5 |
Geometry | where MI_Intersects(obj, MI_Buffer(MI_Point(10.5,51,'epsg:4326'), 200, 'mi', 'Spherical', 12)) |
Envelope_Intersects | where obj EnvelopesIntersect MI_Box(-5,42,33,57,'epsg:4326') |
キー | MI_Key = 5 |
属性の比較 | pop > 10000, city = "Austin" |
InList | city In ("FL", "OH", "NY") |
が NULL である | city Is Null |
Like | city Like "%City" |
Between | pop Between 5000 and 50000 |
論理演算子 OR、NOT | where NOT MI_Envelope(obj) within MI_Box(-180, -90, 180, 90, 'EPSG:4326') |
Spectrum Spatial は必ず、非空間操作よりも空間操作を優先的に委任します。
Spectrum Spatial では、スコアリングの処理を始める前に、WHERE 句を変換して、データ ソースがすべてのサポートする場合に委任できる最も効率的なクエリに変えます。次に、Spectrum Spatial は、変換後の句に含まれる操作をスコアリングします。句は、データ ソースがサポートするものにマッチするよう再構築され、最もスコアの高い操作がデータ ソースに送信されます。例 2 を参照してください。
2 つの比較演算子が WHERE 句に含まれる場合などにスコアが同一で並ぶケースについては、句の最も左側の操作が優先されます。WHERE 句内での操作の順序を決定するには、クエリ作成者がデータをよく理解している必要があります。例えば、ある列にインデックスが作成されているなら、インデックスがない列よりもデータ ソースに委任する操作としてより効果的です。Spectrum Spatial では、この判断を下す過程でデータのチェックは行いません。