以下を使用する
SELECT *
FROM dbo.GRSM_WETLAND_POLY
CROSS APPLY (SELECT TOP 1 Name, shape
FROM GRSM.dbo.GRSM_Trails --WITH(index(S319_idx))
WHERE GRSM_Trails.Shape.STDistance(dbo.GRSM_WETLAND_POLY.Shape) IS NOT NULL
ORDER BY GRSM_Trails.Shape.STDistance(dbo.GRSM_WETLAND_POLY.Shape) ASC) fnc
134行(56秒)では実行速度が非常に遅くなりますが、インデックスヒントがコメント化されていない場合は、次のようになります。
メッセージ8635、レベル16、状態4、行3
クエリプロセッサは、空間インデックスヒントを含むクエリのクエリプランを作成できませんでした。理由:空間索引は、述部で提供されたコンパレーターをサポートしていません。インデックスヒントを削除するか、SETFORCEPLANを削除してみてください。
実行プランでは、フィルターコストが98%であることが示されています。これは、他のテーブルの1400行に対してクエリを実行しているため、合計コストは134 * 1400の個別シークであり、これが遅延の原因です。各テーブルの空間インデックスは、それ自体で、断片化がなく、99%のページフルネスで優れたパフォーマンスを発揮し、オブジェクトごとに16個のセルを持つ4つのグリッドレベルすべてにメディアを使用します。いずれかのテーブルの空間インデックスプロパティを変更しても、パフォーマンスには影響しませんでした。
ドキュメントによると、空間インデックスのヒントはSQL Server 2012のクエリでのみ使用できますが、これには確実に回避策がありますか?