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 では、この判断を下す過程でデータのチェックは行いません。