私は、SQL Server 2008で「カバリング、空間」インデックスを作成することはできますか?

StackOverflow https://stackoverflow.com/questions/1347692

質問

私は現在、緯度/経度フロートの列を持つテーブルを持つサイト、およびそれらの2列以上の指標を加えた私が取得する必要が別のものを持っています。

私は常に特定のポイント(私は実際の速度のための正方形を取得しています)からの半径内に収まる行を取得するには、このテーブルを照会していますが、私は、すでにインデックス化されているフィールドが必要なので、このインデックスは、実際に覆い、および実行計画はわずか2ステップがあります:

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

さて、私は地理列を作成したSQL 2008の空間的な機能を利用しようとしている、作品を空間インデックスを作成し、それを満たしました。

そして、それはすべての実行計画は、百万のステップがあり、時間の74%は、それが実際のテーブルに空間インデックスで見つかった行を結合した場所に、シーククラスタ化インデックスに費やされていることを除いて、正常に動作します
...データの残りの部分を取得 (空間索引は、実行計画のコストの1%を取るシーク)

だから、明らかに、それが適切に空間インデックスを使用して、私は緯度/経度の上に私の「通常の」インデックスを持つ以前よりもずっと速く必要なレコードを見つけることが、メインテーブルに参加している私を殺している、空間クエリがかかります7回私の古いもの限ります。

それはカバーされますと、それはそれは前にやっていただけのよう、ワンステップで物事を行うことができるように、空間インデックスに複数の列を追加する方法はありますか?
私はこのような状況を改善するために行う可能性があり、他のものはありますか?

<時間>

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

ありがとう!
ダニエル

役に立ちましたか?

解決

クエリは常に行のための地理値を取得するために、ベーステーブルへのブックマーク検索を行います -

いいえ、残念ながら現時点で覆い、空間インデックスを作成する方法はありません。

我々はまだそれが実際にパラメータオブジェクトと交差することを確認するために、実際の地理オブジェクトの二次フィルタを実行する必要があるとして、

STIntersectsについては、これは明らかに常に必要です。あなたが正確な答えを必要とせず、フィルターを()を使用することができますしかし、もし、すべてでベーステーブルにルックアップを実行せずにインデックスからの主キー列を提供することも可能です。これをサポートする、我々は次のリリースのために検討されているものです。

あなたの現在のクエリを高速化の面では、あなたが(フィルターを使用)、sp_help_geography_indexからの出力を使用してインデックスをチューニングしようとしたがありますか?

scroll top