3

ここに画像の説明を入力してください以下を使用する

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のクエリでのみ使用できますが、これには確実に回避策がありますか?

4

1 に答える 1

0

主な質問は、なぜヒントを強制するのですか? SQL Server が生成したプランでインデックスを選択しなかった場合、別のプランを強制すると、ほとんどの場合、パフォーマンスが低下します。

すべきことは、実行計画の結果の各ノードを分析して、時間がかかっているボトルネックがどこにあるかを確認することです。プリントスクリーンを投稿していただければ、私たちがお手伝いできるかもしれません

于 2012-05-07T17:28:41.800 に答える