12

SQL SERVER 2012で空間インデックスを使用する方法を学びたいです。非常に時間のかかるクエリがあるため、それが必要です。

いくつかの例と説明をいただければ幸いです。

ありがとう!

4

1 に答える 1

15

少し前に SQLBits カンファレンスでセッションを紹介しましたが、参考になるかもしれません。ビデオとスライドデッキは引き続きオンラインで見ることができます: http://sqlbits.com/Sessions/Event5/Creating_High_Performance_Spatial_Databases

手短に:

  • 空間インデックスは、SQL Server のクラスター化インデックスおよび非クラスター化インデックスとはまったく異なります。
  • これらは、空間クエリに「プライマリ フィルター」を提供することで機能します。空間インデックスはグリッドを使用して、可能な候補結果のおおよそのセットを選択しますが、これには誤検知が含まれる場合があります。
  • 次に、二次フィルターが誤検知を排除して、クエリの真の結果セットを取得します。
  • パフォーマンスの高い空間クエリを取得するための鍵は、正確 (つまり、誤検知がほとんどない) で小さい (つまり、検索するレコードが多すぎない) インデックスを作成することです。より高価な二次フィルター。
  • SQL Server Management Studio または CREATE INDEX T-SQL ステートメントを使用して、ジオメトリ/地理データの列に空間インデックスを作成できます。ただし、そのインデックスがクエリで常に自動的に使用されるとは限りません。空間インデックスが使用されているかどうかを確認するには、クラスター化インデックス シーク (空間)アイテムのクエリ実行プランを調べます。
  • 確実に空間インデックスを使用してクエリを実行するには、SELECT ステートメントのテーブル名の後に WITH(index(YourSpatialIndex)) を含めることで、明示的なインデックス ヒントを追加できます。

プライマリ フィルターのパフォーマンスに影響を与える空間インデックス固有の設定がいくつかあります。まず、4 つのレベルのグリッドすべてで解像度が MEDIUM で、オブジェクトごとに 16 セルであるデフォルトに固執することをお勧めします。ジオメトリ データ型を使用している場合は、データセット全体を含む BOUNDING_BOX を設定してください (地理の場合、空間インデックスは常に地球全体をカバーするため、これは必要ありません)。次に、一度に 1 つの設定を微調整して、パフォーマンスの増減を測定します。

<plug>今後の「Pro Spatial with SQL Server 2012」には、空間インデックス作成と空間クエリのパフォーマンス向上に特化した章があります</plug> - http://www.amazon.com/Pro-Spatial-SQL-Server- 2012/dp/1430234911/ref=sr_1_3?ie=UTF8&qid=1334310547&sr=8-3 (完全な免責事項 - 私は著者です)

于 2012-04-13T10:02:14.363 に答える