2009-08-28 9 views
7

私は現在、緯度/経度浮動小数点型の列を持つ表を持ち、それらの2つの列に索引を加え、もう1つは検索する必要があるサイトを持っています。SQL Server 2008で「カバリング、空間」インデックスを作成できますか?

私はこのテーブルにある特定のポイントから半径内にある行を取得するために常にクエリを実行しています(実際にはスピードは正方形になります)が、インデックスは既に必要なので、このインデックス作成し、それを埋め、私は地理列を作成しました

Index Seek (cost: 100%) and SELECT (cost: 0%) 

、私はSQL 2008の空間的な機能を利用しようとしている:実際のカバーであり、かつ実行計画が唯一の2つの段階があります空間インデックス、作品。

実行計画には100万歩があり、74%がClustered Index Seekに費やされ、Spatial Indexで見つかった行が実際の表に結合されますが、残りのデータを取得するには...
(空間インデックスシークは実行計画コストの1%かかります)

明らかに、Spatialインデックスを適切に使用しています。以前はLat/Longの "通常"インデックスを使用していましたが、メインテーブルへの参加が私を殺しています。Spatialクエリは以前のものの7倍の時間がかかります。

空間インデックスに列を追加する方法はありますか?以前に行っていたように、それをカバーして1ステップで処理できますか?
この状況を改善するために他にもできることはありますか?


UPDATE:私は「通常の」インデックスは、キーワードをINCLUDE使用して他の列「を含む」ことを見出した(私は知りませんでしたこれは、私はちょうど、インデックス自体の列を含めるために使用される)
よりますドキュメントhereには、その句は空間インデックスのオプションではありません... アイデア?

ありがとうございます!
ダニエル

答えて

4

現時点では、カバリング空間インデックスを作成する方法はありません。クエリは常に、行の地理的な値を取得するためにベーステーブルにブックマークルックアップを行います。

STInectectの場合、実際の地理オブジェクトが実際にパラメータオブジェクトと交差していることを確認するためには、依然としてセカンダリフィルタを実行する必要があるため、これは常に必須です。しかし、正確な答えを必要とせず、Filter()を使用することができれば、ベース・テーブルをまったく参照することなく、索引から主キー列を提供することは可能です。これをサポートすることは、次のリリースで検討していることです。

現在のクエリを高速化するために、Filter()を使用して、インデックスをsp_help_geography_indexの出力で調整してみましたか?